Qt on Android:资源文件系统qrc与assets

  • 格式:doc
  • 大小:657.50 KB
  • 文档页数:6

Qt on Android:资源文件系统qrc与assets
使用 Qt 为 Android 开发应用时,有时我们的应用会携带一些资源文件,如
png 、 jpg 等,也可能有一些配置文件,如 xml 等,这些文件放在哪里呢?

有两种方式:
1. qrc
2. 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 示意图
那资源文件怎么放呢?很简单,就是放在 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 ,如下:

[cpp] view plain copy
1. #include
2. #include
3. #include
4.
5. int main(int argc, char *argv[])
6. {
7. QApplication a(argc, argv);
8. QLabel label;
9. QPixmap pixmap("assets:/beauty.jpg");
10. label.setPixmap(pixmap);
11. label.show();
12.
13. return a.exec();
14. }

编译,运行,可以看到图 4 :
图 4 使用 assets 的 Qt on Android 示例

OK,到此结束。