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, можно выбирать папки, а не один файл.