【问题标题】:QtQuick window deploymentQtQuick 窗口部署
【发布时间】:2019-01-29 16:25:49
【问题描述】:

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

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

问题是当我想为桌面部署并使用带有 --qmldir 参数的 Qt windeploy 时,来自 QtQuick 模块的所有 QML 源文件都被复制到最终输出文件夹 由于 QML 源的可用性没有安全性,我手动从文件夹中删除了主题,但随后应用程序无法运行。

我也试过把QtQuick模块的800~900个QML文件全部放到资源qrc文件中,结果还是一样。

如何从应用程序版本中省略 QtQuick 纯 QML 文件并将它们隐藏在用户面前?

提前致谢

【问题讨论】:

  • 为什么这个问题被否决了?有什么问题吗?

标签: deployment qml qtquick2 qtquickcontrols2


【解决方案1】:

Qt 有多个许可证,现在您可能正在使用 LGPLv3,它允许您随意使用 Qt,但作为一个动态库,您必须将 dll 和 Qt qml 目录与您的应用程序一起保存。

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

另外,使用 Android 意味着您使用 apk,然后不尊重 LGPLv3 许可。因此,您不能在 Android 上出售您的应用程序或用它赚钱。

【讨论】:

【解决方案2】:

经过整整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 步,所有样式都是可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多