QML FileDialog设置selectFolder属性报错,寻求技术解决方案
解决QtQuick.Dialogs 1.3中FileDialog设置selectFolder等属性的报错问题
我一眼就看出问题所在了——你用的QtQuick.Dialogs 1.3版本里,根本没有selectFolder、selectExisting、selectMultiple这些属性!这些属性是在QtQuick.Dialogs 1.4(对应Qt 5.6及以上版本)才被添加到FileDialog中的,所以你在1.3版本里设置它们肯定会报错。
下面给你两种可行的解决方案:
方案一:升级Dialogs模块版本(推荐)
如果你的开发环境允许升级Qt版本(至少Qt 5.6),直接把导入语句改成更高版本的模块:
import QtQuick.Dialogs 1.4
改完之后,你原来代码里的selectFolder: true以及其他几个属性就能正常工作了,不需要调整其他逻辑。
方案二:在1.3版本中用兼容方式实现需求
要是因为项目限制没法升级模块,那可以用1.3版本支持的fileMode属性来实现相同的功能:
import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Dialogs 1.3 Window { id: mainWindow visible: true width: 700 height: 500 // FileDialog FileDialog { id: fileDialog title: "Please choose a folder" folder: shortcuts.home // 用fileMode替代selectFolder,实现选择文件夹 fileMode: FileDialog.Directory onAccepted: { console.log("You chose: " + fileDialog.fileUrls) } onRejected: { console.log("rejected") } Component.onCompleted: visible = true } }
这里给你解释一下fileMode的几个枚举值,对应你需要的其他属性:
FileDialog.OpenFiles:对应高版本的selectMultiple: true,允许选择多个文件FileDialog.Directory:对应高版本的selectFolder: true,选择文件夹FileDialog.OpenFile:默认值,选择单个文件(对应selectExisting: true的单文件场景)
这样调整后,就能在1.3版本里实现你想要的选择文件夹、多文件等功能,不会再出现属性不存在的报错了。
内容的提问来源于stack exchange,提问作者fallous
相关产品推荐
相关产品推荐

