问题描述
用于保存文件的 QML npm run test:unit
在调试模式下工作正常。
代码是:
FileDialog
发布模式
令人惊讶的是,在发布模式下,对话框是 open-type 而不是 save-type:
我试过了:
- 更改 QML 导入版本
- 清理发布构建目录
- 修改
import QtQuick 2.5 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Dialogs 1.2 import Qt.labs.settings 1.1 import QtQuick.Controls.Styles 1.4 import Qt.labs.platform 1.0 Item { property string exportSceneName: "exported_scene" property url exportFolder: Standardpaths.writableLocation(Standardpaths.DocumentsLocation) signal startExport() onStartExport: { runLogic() } function runLogic() { // ... } Button { onClicked: { fileDialog.open() } } FileDialog { id: fileDialog folder: exportFolder fileMode: FileDialog.SaveFile title: qsTr("Export Scene As STL") onAccepted: { exportFolder = folder var name = basename(file) exportSceneName = name startExport() } } function basename(str) { return (String(str).slice(String(str).lastIndexOf("/")+1)) } }
文件
然而,他们都没有工作!我研究过类似 this one 之类的帖子,但建议没有用。我还能尝试什么?谢谢。
解决方案
qtquickcontrols2.conf
解决方法
我猜这个问题是与 FileDialog 定义冲突。请注意,导入 QtQuick.Dialogs
和 Qt.labs.platform
都提供了一个名为 FileDialog
的对象,但它们不使用相同的 API。 (QML 中还有其他几个类似的对象,这真的很烦人。)所以它可能试图在调试模式下使用一个版本的对话框,但出于某种原因在发布模式下选择另一个版本。
解决方案是首先确保删除您实际未使用的所有导入。然后,如果您仍然需要两者,那么您可以标记导入:
import QtQuick.Dialogs 1.2 as QDiag
import Qt.labs.platform 1.0 as QPlat
然后,当您创建 FileDialog
时,您必须明确说明要使用哪个。
QDiag.FileDialog {
}
QPlat.FileDialog {
}