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로 설정된 경우에는 파일 대신 전체 폴더를 선택할 수 있습니다.