您的位置:首页 > 移动开发 > Android开发

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

2014-11-13 20:45 302 查看
使用 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 示意图
那资源文件怎么放呢?很简单,就是放在 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 编译纯C工程
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:怎样适应不同的屏幕尺寸

Qt on Android:使用JNI与第三方jar包

《Qt on Android核心编程》介绍

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: