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

               

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

    有两种方式:

  1. qrc
  2. assets

    咱们分别来看下。

the Qt Resource System

    qrc , Qt 的资源文件系统,很好用哦。看个图:

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

                           图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 虚拟文件系统,你的资源文件不会在程序启动时就加载到内存,比较节省资源。

    看一个图:

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

                           图2 assets 示意图    

    那资源文件怎么放呢?很简单,就是放在 Qt 项目目录下的 android/assets 文件夹内即可。如图3:

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

                   图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 :

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

                  图 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包

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.****.net/jiangjunshow