可以为特定项目禁用 Qt 5.8 中的 QML 缓存吗?

Posted

技术标签:

【中文标题】可以为特定项目禁用 Qt 5.8 中的 QML 缓存吗?【英文标题】:Can QML caching in Qt 5.8 be disabled for a particular project? 【发布时间】:2017-01-29 15:31:42 【问题描述】:

Qt 5.8 应该带有可选的提前使用 qtquick 编译器,但它带有一个 sort-of-a-jit-compiler,该功能默认启用并将编译的 QML 文件缓存在磁盘上,以便提高启动性能并减少内存使用。

然而,该功能与 serious bugs 一起出现,这大大减少了,或者在我的情况下甚至完全否定了它的好处,因为我一开始就没有启动时间问题,而且测试也没有发现任何问题内存使用方面的任何改进。

所以我想做的是在我的项目中选择退出该功能,但我似乎不知道如何做到这一点。回到 Qt 5.7.1 不是一个选项,因为我的项目依赖于 5.8 引入的其他新功能。

【问题讨论】:

【参考方案1】:

QML_DISABLE_DISK_CACHE(设置为1)添加到您的环境变量中。您应该可以通过 qputenv 在您的应用程序中执行此操作——在加载 QML 内容之前将其放在 main 的某个位置。

【讨论】:

【参考方案2】:

感谢 peppe 通知我们环境变量,但 qputenv() 仅将 QByteArray 作为值参数,因此 1 将不起作用。

有效的两个选项:

qputenv("QML_DISABLE_DISK_CACHE", "1"); // or
qputenv("QML_DISABLE_DISK_CACHE", "true");

这成功禁用缓存并防止相关的错误出现。

【讨论】:

以上是关于可以为特定项目禁用 Qt 5.8 中的 QML 缓存吗?的主要内容,如果未能解决你的问题,请参考以下文章

IOS上的Qt QML应用程序运行缓慢,JIT被禁用

Qt/QML:在加载程序加载后访问 ListView 以跳转到特定项目/页面

QT Creator 构建 qml 应用程序

QT 5.8 Webview 如何进行请求以及如何拦截它?

为啥当我打开对话框时它会禁用所有 qml 项目

C++ 和 QML 中的 QT QML 项