我尝试提取使用FileDialog
selectFolder: true
选择的文件夹中所有图像文件的路径。
我能找到的所有示例都使用FolderListModel
来获取静态分配的文件夹。
我尝试在对话框中定义一个临时FolderListModel
,并在得到对话框的结果后更改其folder
属性:
FileDialog {
id: select_folder_dialog
FolderListModel {
id: mdl
nameFilters: ["*.jpg", "*jpeg", "*.png"]
}
onAccepted: {
visible = false
var files = []
console.log(folder)
mdl.folder(folder)
text1.text = qsTr("%1 images selected.".arg(mdl.count))
}
title: "Select a folder containing image file(s) to classify"
selectFolder: true
}
但这会让我错误:
无法将对象分配给属性
我很困惑。在我看来,这是一个相当标准的用例(例如,在列表中显示用户定义文件夹中的所有文件),但我找不到任何示例。
这样做的正确方法是什么?
答案 0 :(得分:3)
此处的问题与在QML中处理子Item
的方式有关。一般来说,每个Item
都有一个default
property。
默认属性是如果在另一个对象的定义中声明对象而未将其声明为特定属性的值,则为其分配值的属性。
对于Item
和Item
- 派生类型,此类属性为data
允许您自由混合项目中的可视化子项和资源。如果将可视项目分配给数据列表,它将成为子项,如果您指定任何其他对象类型,则将其添加为资源。
感谢data
您可以,例如混合并匹配Timer
,Rectangle
以及Item
派生类型中的其他可见和不可见类型。可能default
的{{1}}属性不允许这种程度的自由。因此,从FileDialog
中取出 FolderListModel
的解决方案,以避免错误。
还应该注意,简单地分配FileDialog
属性并不授权用户查询模型。 I / O操作可能需要时间,并且模型更新是异步发生的。因此,最好等待适当的事件,例如folder
,以确保模型已准备好进行查询。生成的工作示例可能如下所示:
onFolderChanged