Qml中的FileDialog在Release中不起作用
Posted
技术标签:
【中文标题】Qml中的FileDialog在Release中不起作用【英文标题】:FileDialog in Qml not working in Release 【发布时间】:2018-03-08 17:00:31 【问题描述】:我正在与Qt Quick Control 2
合作项目。
当我尝试在调试模式下运行我的软件时,FileDialog.qml 会完美打开,但是当我将其部署为发布模式时它不起作用。
这是我的代码:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.3
import QtQuick.Dialogs 1.0
// File Dialog to browse
FileDialog
id: openDialog
title: "Please Select An Image"
folder: shortcuts.pictures
nameFilters: ["Image files (*.BMP)"]
modality: Qt.NonModal
selectExisting: true
/*
* do my stuff
*/
【问题讨论】:
不起作用是什么意思? 事实上它在另一台电脑上不起作用。当我在我的电脑上执行我的发布时,它工作正常,但在另一台电脑上,它不起作用 FileDialog 是 QtQuick.Controls 1 版本中的一个类型。你是否已经部署了相应的 QML/Quick 包和你的发布二进制文件? 【参考方案1】:这是我的 Js 函数,它调用 FileBrowse.qml(参数中的文件)。 我在其他视图中这样调用这个函数:
JsCommonCall.openFileDialog("frameFileBrowse.qml",2)
function openFileDialog(file,
parentCalled)
_component = Qt.createComponent(file);
_popUp = _component.createObject(windowsMain, "x": offsetPopUpCreate,
"y": offsetPopUpCreate,
"parentCall":parentCalled);
if(_popUp !== null)
_popUp.open()
这是我的文件浏览器
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Dialogs 1.0
// File Dialog to browse
FileDialog
id: openDialog
title: "Please Select An Image"
folder: shortcuts.home
nameFilters: ["Image files (*.BMP)"]
selectFolder: true
// variables
property int parentCall;
onAccepted:
imgCurrentCam1.source = openDialog.fileUrl;
openDialog.close()
onRejected:
openDialog.close()
【讨论】:
【参考方案2】:这对我有用
FileDialog
id: fdExport
title: qsTr("File name")
folder: shortcuts.home
selectFolder: true
onAccepted:
然后运行
fdExport.open()
请尝试离开
modality: Qt.NonModal
来自您的代码。
【讨论】:
我尝试了,但它不起作用。正如我之前所说,我认为这不是代码问题,而是 .dll 问题,因为,当我在另一台 PC 上部署我的软件时,它不起作用,但在我的 PC 中却可以正常工作。谢谢你给我你的意见 有人可以帮我吗? 好的,知道这一点很重要。请查看您如何共享您的应用程序。当我为 Windows 发布 Qml 应用程序时,我通常将 Qt 框架中的完整 Qml 文件夹放在 exe 路径中。此外,我通常将所有 Qt dll 放在 exe 路径中,因为无法从 qml 源代码中知道将使用哪些 dll。最后bat很重要的是qt.conf文件。请尝试将完整的 qml 文件夹和所有 dll 添加到您的 exe 安装中,然后在此处回复它是如何消失的。 您好,我将我的应用程序的 .exe 与所有 .dll 和 qt.conf 以及其他 .dll 一起放入 Qt 框架 (Qt/5.9/mingwXXX/bin) 但它在另一台 PC 中不起作用. 好的,此时您应该分享或发送给我一个有该行为的小项目,以便我验证和解决。可能分辨率在你的眼皮底下,但有点隐藏。【参考方案3】:我不知道问题出在哪里,但下面的代码在 Windows 机器上是完全可移植的。也在 Linux 中测试过。
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.0
Window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
FileDialog
id: fdImport
title: qsTr("File name")
folder: shortcuts.home
onAccepted:
textEdit.text= fdImport.fileUrls[0]
Rectangle
id: rectangle
color: "#ffffff"
anchors.fill: parent
Rectangle
id: rectangle1
color: "#ffffff"
anchors.right: parent.right
anchors.rightMargin: 8
anchors.left: parent.left
anchors.leftMargin: 8
anchors.bottom: rectangle2.top
anchors.bottomMargin: 6
anchors.top: parent.top
anchors.topMargin: 8
TextEdit
id: textEdit
text: qsTr("Text Edit")
anchors.fill: parent
font.pixelSize: 12
Rectangle
id: rectangle2
y: 441
width: 128
height: 32
color: "#ffffff"
anchors.left: parent.left
anchors.leftMargin: 8
anchors.bottom: parent.bottom
anchors.bottomMargin: 7
MouseArea
id: mouseArea
anchors.fill: parent
onClicked:
fdImport.open()
Text
id: text1
text: qsTr("Click me!")
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
anchors.fill: parent
font.pixelSize: 12
qt.conf 文件
[Paths]
Plugins=plugins
Libraries=libs
请记住复制可执行文件夹中的所有 dll(发布),以及 qml 和 plugins 文件夹。
【讨论】:
MODE DEBUG : 消息来自 OUTPUT 当我单击浏览按钮时: ------>>>>ShellStreams: AttachShellStreams: InitializedTrying to load local resources for LANGID 1036 with Primary LANGID 12 code fr在路径 C:\Program Files (x86)\Common Files\Apple\Internet Services\ShellStreams.resources\fr.lproj\ShellStreamsLocalized.dll 加载的名称法语(通用)资源 DLL 不在资源管理器下运行。不会设置线程 locale11284 506C2510 ENTER: ShellStreamsFolder::ShellStreamsFolder pidl = 1f50e04fd020ea3a6910a2d8802b30309d140 -> 2e80853fd6f0ec379740b3d61b4a891711800 ->【参考方案4】:一个奇怪但可能的原因是防病毒:我的 FileDialog 也没有打开,整个 QML 应用程序挂起,而 AV 处于活动状态。
【讨论】:
以上是关于Qml中的FileDialog在Release中不起作用的主要内容,如果未能解决你的问题,请参考以下文章