新建空项目
尝试过很多种方式,Android 下都会闪退,没有办法的情况下只能以归零的心态取搞,直接新建一个项目,项目结构除了 UI 部分的放在 UPCNC 子项目下,其他不变。
这样就可以慢慢的从头开始调试,经过半天的折腾,项目框架搭建完毕,并将原来的 QML 界面相关资源加载到新项目中并顺利的让程序运行起来,这样第一步就基本完成。
工程文件中配置 assets 资源
设置完下面的内容之后需要重新构建,直接运行可能无法将资源拷贝进去。
将 QML 部分代码移植过来之后会发现界面中无法加载的图片资源,其原因是 Android 下查找资源的方式不一样。
- 在 UPCNC3.pro 工程文件中增加一下内容,其功能是将 views 下所有资源打包进入到 assets 目录下。
# 配置 Android
android {
lre = D:\software\Qt\5.15.2\android\bin\lrelease
pDir = $${PWD}
pDir = $$replace(pDir, /, \\)
dDir = $${DESTDIR}
dDir = $$replace(dDir, /, \\)
QMAKE_PRE_LINK += xcopy $${pDir}\\views $${dDir}\\assets\\views\\ /Y /E /s
setting.files += $${DESTDIR}/assets/*
setting.path = /assets/
INSTALLS += setting
}
- 修改图片资源加载目录,Android 下将 assets 目录作为根目录使用。
int main(int argc, char *argv[])
{
//...
#ifdef __ANDROID__
QString resRootPrefix = "assets:/views/";
#else
QString resRootPrefix = "file:./views/";
#endif
QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
context->setContextProperty("resRoot", resRootPrefix);
context->setContextProperty("resImgRoot", resRootPrefix + "img/");
context->setContextProperty("$titleRoot", gTitle);
const QUrl url(QStringLiteral("qrc:/qml/main.qml"));
//...
}