fol*_*bis 11 deployment qt qml qtquick2
为了测试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();
}
Run Code Online (Sandbox Code Playgroud)
main.qml
import QtQuick 2.2
import QtQuick.Controls 1.2
ApplicationWindow {
id: mainWindow
title: "Test window"
width: 800
height: 600
visible: true
}
Run Code Online (Sandbox Code Playgroud)
为了确保系统中没有安装任何开发库,我设置了一个纯Windows XP安装的虚拟机.然后,我按照此处所述的说明将所有 Qt5*.dll 复制到程序目录中,以及platforms/qwindows.dll和icu*52.dll.Dependency Walker确认没有遗留任何破坏的依赖关系,即一切都应该已经正确设置.
但是,由于某些原因,当我运行我的应用程序时,我什么也看不见.既不是窗口,也不是错误消息.从控制台运行也没有错误.尽管如此,我可以看到我的应用程序在任务管理器中运行,就像它在后台运行一样.在开发机器上运行应用程序没有问题:应用程序正确启动,我可以看到它的窗口.
我究竟做错了什么?如何部署QML应用程序以确保它可以在任何其他 - 非开发 - 机器上运行?
小智 7
如果您使用MinGW,请尝试将文件夹qml和plugins中的所有文件夹复制到您的程序目录中.同时复制库:icudt52.dll,icuin52.dll,icuuc52.dll,libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll,Qt5Core.dll,Qt5Gui.dll,Qt5Network.dll,Qt5Qml.dll,Qt5Quick.dll,Qt5Svg.dll,Qt5Widgets.dll从斌
最终目录将如下所示:
这种方式适用于未安装Qt的WindowsXP/Win7.
这是我到目前为止所发现的,
你不能只在main.cpp中打开一个qml文件,你必须把这些qmls放到一个资源中
qml.qrc:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
然后main.cpp必须从资源加载它
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
然后构建并检查它是否有效,然后部署如下:
然后
cd deploy
windeployqt --release --qmldir <qml-dir-location> <exe-location>
Run Code Online (Sandbox Code Playgroud)
注意:将windeployqt的位置添加到PATH,例如.C:\ Qt的\ Qt5.5.1\5.5\msvc2013\BIN
| 归档时间: |
|
| 查看次数: |
7323 次 |
| 最近记录: |