应用程序在调试时工作,但在“发布”时不起作用

时间:2013-02-11 12:11:15

标签: qt qml qt5 qtquick2

所以,我刚刚创建了一个标准的QtQuick 2应用程序,它有默认的RecangleTextMouseArea。所以,我只是尝试在发布模式下编译应用程序,看看它会生成什么文件,然后我尝试打开应用程序,这发生了:

当我调整大小时,我可以看到空格:

然而,它在调试中都能正常工作:

enter image description here

我正在使用Qt 5.0.1和QtQuick2

更新

因此,在通过Dependency Walker运行后,似乎缺少三个文件:qt5quick.dllqt5gui.dllqt5core.dll我是否必须从某个地方手动添加它们?

目前的目录结构是:

`test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release/release
|+qml
 |+test
  |-main.qml
|-main.obj
|-moc_qtquick2applicationviewer.cpp
|-moc_qtquick2applicationviewer.obj
|-qtquick2applicationviewer.obj
|-test.exe
|-test.exe.embed.manifest

注意:我按照Nemanja Boric's answer中的建议从父目录粘贴了qml目录,但这并没有解决问题! :(

此外,我的印象是,没有任何来源(除了JavaScript之外)不会与应用程序一起公开分发,而是以某种方式编译或打包在应用程序中(注意.cpp文件和qml目录??

更新2

从Qt 5 Creator中运行时,应用程序运行正常:

Starting [...]\test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release\release\test.exe...
QOpenGLShader::link: "(41,18): warning X3206: implicit truncation of vector type

" 
[...]\test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release\release\test.exe exited with code 0

嗯,除了那个尴尬的警告......

1 个答案:

答案 0 :(得分:3)

您需要将qml文件复制到当前目录中。使用QtCreator创建发布应用程序时,您将拥有此目录结构(或类似内容):

example-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release
  |-     debug
  |-     qml
  |-     release // application executable is here

您需要做的是将qml文件夹复制到与可执行版本文件位于同一目录中(只需将qml文件夹复制到release文件夹中)。

关于dll文件 - 您可以从QtInstallDir/bin文件夹手动复制它们,或者您可以将该目录添加到PATH,如果您在该计算机上进行开发 - 可能会更容易。

您不需要发布cpp文件,但需要发布qml文件。你可以做什么,通过我永远不会成功,但似乎可能是将qml文件捆绑到资源文件,并从资源加载它,但也可以轻松提取 - 所以 - 不要把您在qml文件中的逻辑或机密信息

此外,您需要使用exe:qt5quick.dll,qt5gui.dll,qt5core.dll和libEGL.dll将所有必需的dll文件复制到目录中。