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

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt on Android 资源文件系统qrc与assets相关的知识,希望对你有一定的参考价值。

   使用 Qt 为 android 开发应用时,有时我们的应用会携带一些资源文件,如 png 、 jpg 等,也可能有一些配置文件,如 xml 等,这些文件放在哪里呢?有两种方式:qrc和assets,咱们分别来看下。

Qt Resource System

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

       你放在 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 项目目录下的 android/assets 文件夹内即可。
技术分享

       只要你这么一放, Qt 编译时就会把 assets 内的文件打包到 APK ,然后就可以在 C++ 代码内访问了。

使用 assets 的 Android 示例

       建立一个针对 Android 的项目。 创建 AndroidManifest.xml ,然后在 android/assets 目录下放一个 beauty.jpg 。删除项目的 widget.h 和 widget.cpp 。修改 main.cpp ,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#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();
}

       编译,运行,可以看到下图 :
技术分享

       OK,到此结束。

https://greedysky.github.io/2016/04/03/Qt%20on%20Android%20%E8%B5%84%E6%BA%90%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9Fqrc%E4%B8%8Eassets/

以上是关于Qt on Android 资源文件系统qrc与assets的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发之基础控件--2.3 QT资源文件

Qt 资源系统和 MSVC C1060

Qt qrc 资源文件 - 无法加载图标

qt 在windows 以及android 运用资源时的路径使用用限制

如何获取存储在 .qrc Qt 资源文件中的文件列表?

Qt5 将 qrc 移至 DLL