QML是可以通过编译为二进制代码来加速启动的,同时编译QML兼具保护源代码的效果。
以下的实例是经过与老外讨论总结出来的,测试通过:
1. 项目根目录新建文件qrc-assets.qrc 内容为:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file>assets/main.qml</file>
<file>assets/common/mycomponent.qml</file>
...
</qresource>
</RCC>
关键点:包含所有qml文件。不支持通配符
2. 修改.pro文件,最后加入:
RESOURCES += qrc-assets.qrc
DEPENDPATH += assets
3.修改bar-descriptor.xml,以过滤 *.qml
把"<asset path="assets">assets</asset>"改成如下
<asset path="assets" dest="assets">
<exclude name="**/*.qml"/>
</asset>
4. 最后需要修改qml、cpp文件
QML:
import "Common" //这样的路径不用动
import "../Common"
qml里面引用qml文件可以不用动,可以这样:
source : "about.qml"
如果图像是这样就不行:
imageSource : "images/icon_vibro.png"
是绝对路径就不用改:
imageSource : "asset:///images/icon_vibro.png"
imageSource: "file:///accounts/1000/...../images/icon_vibro.png"
注意asset没有s
CPP:
QmlDocument *qml
= QmlDocument::create( "asset:///main.qml").parent( this);
改成:
QmlDocument *qml
= QmlDocument::create( "qrc:/assets/main.qml").parent( this);
(注意asset加个s)
如果图像是这样就不行:
btnSensorSwitch -> setImageSource( QUrl( "images/icon_stop.png" ));
是绝对路径就不用改:
btnSensorSwitch -> setImageSource( QUrl( "asset:///images/icon_stop.png" ));
shared/documents/这类的不用改
本文介绍如何将QML文件编译成二进制代码以加速应用启动,并保护源代码。步骤包括修改项目配置文件(.pro)、资源文件(qrc)、bar-descriptor.xml及调整QML和C++中的资源引用。

被折叠的 条评论
为什么被折叠?



