deployment - QtQuick 窗口部署
问题描述
我正在使用 Qt 5.12 和 QtQuickControls 2 创建一个 Qt QML 应用程序
当我在桌面上开发并在 android 设备上部署时,一切正常。
问题是当我想为桌面部署并使用带有 --qmldir 参数的 Qt windeploy 时,来自 QtQuick 模块的所有 QML 源文件都被复制到最终输出文件夹由于 QML 源的可用性没有安全性,我手动删除文件夹中的主题,但应用程序未运行。
我也试过把QtQuick模块的800~900个QML文件全部放到资源qrc文件中,结果还是一样。
如何从应用程序版本中省略 QtQuick 纯 QML 文件并将它们隐藏在用户面前?
提前致谢
解决方案
经过整整3天的搜索、测试和编译,我达到了这个:
步骤 0:使用 Qt 资源文件将自己的 QML 文件放入其中
第 1 步:像往常一样使用动态链接编译应用程序
第 2 步:将最终输出的二进制文件复制到一个空文件夹中
第 3 步:windeploy.exe
在文件上运行并使用--qmldir
包含 QML 的文件夹的地址。这应该在正确的目录层次结构中添加所有插件(这是关键)
*.qml
第 4 步:从 windeploy 创建的所有文件夹中删除所有 QML 文件 ( )。剩下的是*.dll,
plugins.qmltypes,
qmldir
文件(这也是允许删除普通 QML 文件的其他键)
第 5 步(可选):您还可以将所有plugins.qmltypes
.qmldir
文件(纯文本文件,最终用户可以简单地编辑)放入 Qt 资源文件(但文件夹的层次结构必须在资源文件中保持相同)通过将主题剪切并粘贴到源文件夹的根目录并将它们添加到 qrc 文件中,然后在您的main
函数中使用此代码:
engine.addImportPath(QStringLiteral("qrc:/"));
注意:如果使用第 5 步,则在使用 QML 样式时可能会出现一些问题Default
(如Univeral,
...),但如果没有第 5 步,则所有样式都可以使用
推荐阅读
- visual-studio-code - 有没有办法在 Visual Studio Code 中自动查看 JSON 文件?
- c++ - 我收到错误无法打开“cygwin.S”
- docusignapi - Docusign API:更改签名者姓名
- python-3.x - 将有符号数转换为 little endian 格式的 16 位二进制值
- generics - 如何为已知的 T 类型实现反序列化器?
- laravel-5 - 在选择选项中加载select2 js空值
- python - 在 Thread 外发信号
- javascript - 元素可见时触发 Javascript 计数器
- eclipse - gRPC - 使用 Java 以外的代码创建服务实现
- reactjs - React Final Form Material UI 在输入字段上创建双线