Okno dialogowe dokumentów

Moduł AppStudioAppFramework zawiera komponent DocumentDialog służący do wybierania plików z pamięci lokalnej urządzenia. Funkcjonalność tego komponentu jest identyczna jak komponentu FileDialog w języku Qt Quick, zawiera on te same właściwości i metody, ale korzysta z natywnego okna dialogowego wyboru plików dla wszystkich platform zamiast niestandardowego okna dialogowego plików w systemach iOS i Android, co pozwala na lepszą interakcję z systemem operacyjnym.

Przeglądanie plików w oknie dialogowym dokumentów

Jedynym wymogiem przy korzystaniu z komponentu DocumentDialog jest metoda open. Ponadto w przypadku urządzeń z systemem Android wymagane jest włączenie uprawnień do pamięci zewnętrznej. Poniższy przykład kodu przedstawia podstawowe użycie komponentu DocumentDialog, w tym opcję włączenia uprawnienia do pamięci, jeśli jeszcze nie została włączona oraz rejestrowanie potencjalnych błędów w dzienniku konsoli.

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
                        }
                }
        }
}

Dodatkowe właściwości

Komponent DocumentDialog udostępnia także szereg właściwości, których można użyć w celu zmiany wyglądu i zachowania wynikowego okna dialogowego. Pełną listę tych właściwości zawiera Dokumentacja API,, ale w poniższym przykładzie kodu przedstawiono przydatne właściwości, za pomocą których można uzyskać bardziej precyzyjny wybór pliku. Właściwość title służy do nadania tytułu oknu dialogowemu, właściwość selectMultiple pozwala podać wiele plików, a właściwość nameFilters udostępnia dwie opcje filtrowania, dzięki czemu można dokonać wyboru spośród wszystkich plików, albo tylko plików .jpg lub .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
                }
        }
}

Właściwości selectExisting i selectFolder pozwalają na zmianę sposobu interakcji z plikami. Jeśli właściwość selectExisting zostanie ustawiona na wartość fałsz (false), można użyć okna dialogowego do utworzenia pliku zamiast wybrania istniejącego pliku. Natomiast jeśli właściwość selectFolder zostanie ustawiona na wartość prawda (true), zamiast pliku można wybierać całe foldery.