使用 Qt 为 Android 开发应用时,有时我们的应用会携带一些资源文件,如 png 、 jpg 等,也可能有一些配置文件,如 xml 等。这些文件放在哪里呢?
有两种方式:
- qrc
- assets
咱们分别来看下。
the Qt Resource System
qrc 。 Qt 的资源文件系统,非常好用哦。
看个图:
图1 qrc 示意图
你放在 qrc 里的文件,如 copy.png ,会被编译到 exe 文件里(Android应用是 libapplication.so )。当你执行应用时,这些资源也会被载入到内存。假设你的资源非常大,这是个问题。
假设是在 Android 平台上,你还有另外一个选择。
Android 的 assets
Android 项目文件夹中有一个 assets 文件夹,该文件夹内放置的文件会原封不动打包到 APK 中。APK 在 Android 系统安装时。 assets 不会被安装到应用文件夹下。注意。它还在 APK 里哦,可是应用能够訪问这个文件夹内的资源!
Qt 利用了这样的机制,实现了 assets 虚拟文件系统。我们常见的 QFile 、 QPixmap 、 QImage 等,都能够通过 "assets:/" 的方式来訪问 assets 内的文件。
使用 assets 虚拟文件系统。你的资源文件不会在程序启动时就载入到内存,比較节省资源。
看一个图:
图2 assets 示意图
那资源文件怎么放呢?非常easy,就是放在 Qt 项目文件夹下的 android/assets 文件夹内就可以。如图3:
图3 使用 assets 的文件夹结构
仅仅要你这么一放, Qt 编译时就会把 assets 内的文件打包到 APK ,然后就能够在 C++ 代码内訪问了。
使用 assets 的 Android 演示样例
參考《Qt on Android:图文具体解释Hello World全过程》建立一个针对 Android 的项目。
创建 AndroidManifest.xml 。然后在 android/assets 文件夹下放一个 beauty.jpg 。删除项目的 widget.h 和 widget.cpp 。改动 main.cpp ,例如以下:
#include <QApplication>
#include <QLabel>
#include <QPixmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel label;
QPixmap pixmap("assets:/beauty.jpg");
label.setPixmap(pixmap);
label.show();
return a.exec();
}
编译,执行。能够看到图 4 :
图 4 使用 assets 的 Qt on Android 演示样例
OK,到此结束。
回想一下 Qt on Android 系列:
Qt on Android:图文具体解释Hello World全过程 Windows下Qt 5.2 for Android开发入门 Qt for Android 部署流程分析 Qt on Android:将Qt调试信息输出到logcat中 Qt on Android: Qt 5.3.0 公布,针对 Android 改进说明 Qt on Android Episode 1(翻译) Qt on Android Episode 2(翻译) Qt on Android Episode 3(翻译) Qt on Android Episode 4(翻译) Qt for Android 编译纯Cproject Windows下Qt for Android 编译安卓C语言可执行程序 Qt on Android: Android SDK安装 Qt on Android: http下载与Json解析 Qt on Android 之设置应用名为中文 Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示 Qt on Android:如何适应不同的屏幕尺寸