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/这类的不用改