为了测试QML部署,我创建了一个非常简单的QML应用程序。这是代码:
的main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QFile>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QQmlApplicationEngine engine;
QString path = app.applicationDirPath() + "/qml/main.qml";
if(QFile::exists(path))
engine.load(path);
else {
return 1;
}
return app.exec();
}
main.qml
import QtQuick 2.2
import QtQuick.Controls 1.2
ApplicationWindow {
id: mainWindow
title: "Test window"
width: 800
height: 600
visible: true
}
为确保系统中未安装任何开发库,我已经设置了一个纯Windows XP安装的虚拟机。然后,我按照here所述的说明操作,并将所有 Qt5 * .dll复制到程序目录中,以及platforms / qwindows.dll和icu * 52.dll。 Dependency Walker确认没有遗留任何破坏的依赖关系,即一切都应该已经正确设置。
然而,由于某些原因,当我运行我的应用程序时,我什么也看不见。既不是窗口,也不是错误消息。从控制台运行也没有错误。尽管如此,我可以看到我的应用程序在任务管理器中运行,就像它在后台运行一样。在开发机器上运行应用程序没有问题:应用程序正确启动,我可以看到它的窗口。
我做错了什么?如何部署QML应用程序以确保它可以在任何其他 - 非开发 - 机器上运行?
答案 0 :(得分:8)
如果您使用MinGW,请尝试将文件夹 qml 和插件中的所有文件夹复制到您的程序目录中。同时复制库:icudt52.dll
,icuin52.dll
,icuuc52.dll
,libgcc_s_dw2-1.dll
,libstdc++-6.dll
,libwinpthread-1.dll
,Qt5Core.dll
,{{1}来自 bin
Qt5Gui.dll
,Qt5Network.dll
,Qt5Qml.dll
,Qt5Quick.dll
,Qt5Svg.dll
最终目录将如下所示:
这种方式适用于未安装Qt的WindowsXP / Win7。
答案 1 :(得分:5)
这是我到目前为止所知道的,
您无法在main.cpp中打开qml文件,您必须将这些qmls放入资源
qml.qrc:
private var KTableHeaderHeight: CGFloat
然后main.cpp必须从资源
加载它<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
然后构建并检查它是否有效,然后按如下方式进行部署:
然后
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
注意:将windeployqt的位置添加到PATH 例如。 C:\ Qt的\ Qt5.5.1 \ 5.5 \ msvc2013 \ BIN
答案 2 :(得分:2)
您应该使用Qt附带的部署工具。请参阅Qt for Windows - Deployment,其中有一节&#34; Windows部署工具&#34;。
答案 3 :(得分:1)
如BaCaRoZzo所述,对我来说效果很好的一般解决方案是遵循此guide。
总结起来,复制到一个空目录中:
首先,在应用程序测试期间,重命名qt文件夹,以便$ PATH找不到该文件夹,然后双击MyApp.exe。这应该运行该程序。
NB:这会导致一个非常大的应用程序,因此您将需要删除一些额外的文件和文件夹。
对于dll,最简单的方法是:运行程序,然后在运行时删除新项目中的所有dll。只有未被MyApp.exe使用的文件才会被删除。高效!
对于Qt文件夹,请反复尝试。
答案 4 :(得分:0)
您需要部署应用程序,为此,我使用该实用程序 cqtdeployer
该实用程序本身会收集应用程序的所有必需依赖关系,您不必花时间在它上面,也可以自动化此过程。
您可以从github版开始安装(Windows)
或
来自snapstore(Linux)
sudo snap install cqtdeployer
您可以使用以下方式:
%cqtdeployer% -bin myApp -qmake path/to/Qt/5.x.x/build/bin/qmake.exe -qmlDir path/to/my/qml/files/dir
cqtdeployer -bin myApp -qmake path/to/Qt/5.x.x/build/bin/qmake -qmlDir path/to/my/qml/files/dir
path / to / Qt / 5.x.x / build / bin / qmake-这是qmake用来构建程序的方式。
path / to / my / qml / files / dir-这是直接到您的qml文件(您编写)的路径
然后使用sh脚本(Linux)或exe(Windows)运行应用程序
如果您需要使用Windows版本,只需从installer安装应用程序
答案 5 :(得分:0)
使用 windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exe
命令。
qmldir 之后的第一个参数是您的 qml 文件夹位置,第二个参数是您的 exe 所在的位置。您将在任何环境中获得可部署的 exe。