Qt on Android:资源文件系统qrc与assets
2014-11-13 20:45
302 查看
使用 Qt 为 Android 开发应用时,有时我们的应用会携带一些资源文件,如 png 、 jpg 等,也可能有一些配置文件,如 xml 等,这些文件放在哪里呢?
有两种方式:
qrc
assets
咱们分别来看下。
![](http://img.blog.csdn.net/20141113203046414?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1 qrc 示意图
你放在 qrc 里的文件,如 copy.png ,会被编译到 exe 文件中(Android应用是 libapplication.so )。当你运行应用时,这些资源也会被加载到内存。如果你的资源很大,这是个问题。
如果是在 Android 平台上,你还有另外一个选择。
Qt 利用了这种机制,实现了 assets 虚拟文件系统,我们常见的 QFile 、 QPixmap 、 QImage 等,都可以通过 "assets:/" 的方式来访问 assets 内的文件。
使用 assets 虚拟文件系统,你的资源文件不会在程序启动时就加载到内存,比较节省资源。
看一个图:
![](http://img.blog.csdn.net/20141113203615559?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2 assets 示意图
那资源文件怎么放呢?很简单,就是放在 Qt 项目目录下的 android/assets 文件夹内即可。如图3:
![](http://img.blog.csdn.net/20141113203822421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图3 使用 assets 的目录结构
只要你这么一放, Qt 编译时就会把 assets 内的文件打包到 APK ,然后就可以在 C++ 代码内访问了。
创建 AndroidManifest.xml ,然后在 android/assets 目录下放一个 beauty.jpg 。删除项目的 widget.h 和 widget.cpp 。修改 main.cpp ,如下:
编译,运行,可以看到图 4 :
![](http://img.blog.csdn.net/20141113204158562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图 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:怎样适应不同的屏幕尺寸
有两种方式:
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核心编程》介绍
相关文章推荐
- Qt on Android 资源文件系统qrc与assets
- Android 读取资源文件(assets 文件夹 或res文件夹 )下面的文件
- android中加载assets中的资源文件
- android 系统资源文件
- android中拷贝assets下的资源文件到SD卡中(可以超过1M)
- Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)
- (转)android常见问题之jni读取assets资源文件(附源码)
- Android从raw、assets、SD卡中获取资源文件内容
- Android进阶:打jar包获取assets中的资源 解决selector XML文件不能解析的问题
- 打包Android系统ANE扩展时,包含资源文件和.so库
- Android 的assets文件资源与raw文件资源读取
- android常见问题之jni读取assets资源文件
- Android应用程序中访问文件应用程序包中的资源(assets目录)
- 如何引用android系统公开(非公开)的资源文件,包括字符串,layout,color,等等
- ListView,文件读取,android assets资源,图像读取,java 字符编码
- android jni 读写资源文件(assets)
- Android进阶:打jar包获取assets中的资源 解决selector XML文件不能解析的问题
- android中拷贝assets下的资源文件到SD卡中(可以超过1M)
- android读写assets目录下面的资源文件(文件夹)
- android开发--- jni读取assets资源文件