Диалоговое окно документа

AppStudioAppFramework содержит компонент DocumentDialog для выбора файлов из локального хранилища устройства. Функционально компонент идентичен компоненту Qt Quick FileDialog , содержащему те же самые функции и методы, но использует общее диалоговое окно выбора для всех платформ, вместо собственного диалогового окна на iOS и Android, что повышает удобство использования ОС.

Обзор файлов с диалоговым окном документа

Для использования компонента DocumentDialog, единственным требованием является наличие метода open. Включение разрешений на доступ к внешним хранилищам также необходимо на устройствах с Android. В следующем примере кода показано базовое применение DocumentDialog, включая опцию включения разрешения на доступ к хранилищу, если оно еще не получено, и запись возможных ошибок в журнал консоли.

Item {
    property bool storagePermissionGranted
    Component.onCompleted: {
        // Check if storage permission is granted (only required for Android)
        storagePermissionGranted = Permission.checkPermission(Permission.PermissionTypeStorage) === Permission.PermissionResultGranted
    }
    PermissionDialog {
        id: permissionDialog
        openSettingsWhenDenied: true
        permission: PermissionDialog.PermissionDialogTypeStorage
        onAccepted: {
            documentDialog.open()
            console.log("Permission accepted")
        }
        onRejected: {
            console.log("Permission rejected")
        }
    }
    Button {
        text: "Select document"
        onClicked: {
            if (documentDialog.supported) {
                if (storagePermissionGranted === false){
                    permissionDialog.open()
                }
                else (storagePermissionGranted === true){
                    documentDialog.open()
                }
            }
            else {
                console.log("Not Supported")
            }
        }
    }
        DocumentDialog {
                id: documentDialog
                onAccepted: {
                        console.log("selected file URL " , fileUrl)
                }
                onRejected: {
                        if (status == DocumentDialog.DocumentDialogCancelledByUser) {
                                // Cancelled By User
                        }
                        if (status == DocumentDialog.DocumentDialogPermissionDenied) {
                                // Permission Denied
                        }
                        if (status == DocumentDialog.DocumentDialogNotSupported) {
                                // Not Supported
                        }
                        if (status == DocumentDialog.DocumentDialogFileReadError) {
                                // File Read Error
                        }
                }
        }
}

Дополнительные свойства

Компонент DocumentDialog также предоставляет различные параметры, которые могут использоваться для изменения внешнего вида и поведения диалогового окна. Полный список этих параметров можно найти в Справке по API,, но в следующем примере кода приведены полезные параметры, которые могут применяться для более точного выбора файлов. В частности, параметр title используется для присвоения заголовка диалоговому окну, параметр selectMultiple позволяет указывать несколько файлов, а nameFilters предлагает две опции фильтрации, позволяя производить выборку из всех файлов, или только из файлов .jpg или .png.

DocumentDialog {
        id: doc
        title: "Select an image"
        selectMultiple: true
        nameFilters: [ "Image files (*.jpg *.png)", "All files (*)" ]
        onAccepted: {
                console.log("selected file path " , filePath)
        }
        onRejected: {
                if (status == DocumentDialog.DocumentDialogCancelledByUser) {
                        // Cancelled By User
                }
                if (status == DocumentDialog.DocumentDialogPermissionDenied) {
                        // Permission Denied
                }
                if (status == DocumentDialog.DocumentDialogNotSupported) {
                        // Not Supported
                }
                if (status == DocumentDialog.DocumentDialogFileReadError) {
                        // File Read Error
                }
        }
}

Параметры selectExisting и selectFolder могут использоваться для изменения способа взаимодействия с файлами. Если для selectExisting задано false, можно использовать диалоговое окно для создания файла, вместо выбора имеющегося, а если для selectFolder задано true, можно выбирать папки, а не один файл.