QtQuick窗口部署

时间:2019-01-29 16:25:50

标签: deployment qml qtquick2 qtquickcontrols2

我正在使用Qt 5.12和QtQuickControls 2创建Qt QML应用程序

当我在桌面上进行开发并在android设备上进行部署时,一切正常。

问题是,当我想为台式机部署并将Qt windeploy与--qmldir参数一起使用时,会将QtQuick模块中的所有QML源文件复制到最终输出文件夹中 由于无法获得QML来源的安全性,因此我手动从文件夹中删除了主题,但随后该应用程序无法运行。

我还尝试将QtQuick模块的所有800〜900个QML文件放入资源qrc文件中,但是结果是相同的。

如何从应用程序版本中忽略QtQuick纯QML文件,并向用户隐藏它们?

预先感谢

2 个答案:

答案 0 :(得分:0)

Qt具有多个许可证,现在您可能正在使用LGPLv3,它允许您根据需要使用Qt,但可以将其用作动态库,因此必须将dll和Qt qml目录保留在应用程序中。

您要执行的操作将需要在应用程序中静态添加Qt。为此,您必须使用Qt的商业许可证。

此外,使用Android意味着您使用apk,然后不遵守LGPLv3许可。因此,您将无法在Android上出售您的应用程序或通过它获利。

答案 1 :(得分:0)

在搜索,测试和编译了整整3天后,我到达了这一点:

第0步:使用Qt资源文件将您自己的QML文件放入其中

第1步:使用动态链接照常编译应用程序

第2步:将最终输出二进制文件复制到一个空文件夹中

第3步:对该文件运行windeploy.exe,并将--qmldir与包含您的QML的文件夹地址一起使用。这应该将所有插件添加到正确的目录层次结构中(这是关键)

步骤4:从windeploy创建的所有文件夹中删除所有QML文件(*.qml)。其余的是*.dll, plugins.qmltypes, qmldir个文件(这也是其他允许删除普通QML文件的键)

第5步(可选):您还可以将所有plugins.qmltypesqmldir文件(它们是纯文本文件,可以由最终用户简单地编辑)放入Qt资源文件中(但文件夹的层次结构必须在资源文件中保持不变),方法是将主题剪切并粘贴到源文件夹的根目录中,并将其添加到qrc文件中,然后在main函数中使用以下代码:

engine.addImportPath(QStringLiteral("qrc:/"));

注意:如果使用第5步,则使用Default以外的QML样式(例如Univeral, ...)可能会出现一些问题,但没有第5步,所有样式都可以使用