使用 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 示意图

那资源文件怎么放呢?非常easy,就是放在 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 编译纯Cproject
  • 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:资源文件系统qrc与assets的更多相关文章

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

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

    2. android资源目录---assets与res/raw区别

      android资源目录---assets与res/raw的不同 Android 2011-05-24 14:40:21 阅读20 评论0   字号:大中小 订阅 assets:用于存放需要打包到应用程 ...

    3. 【转】QT中添加的资源文件qrc时的路径问题小结

      @2019-06-13 [小记] QT中添加的资源文件qrc时的路径问题小结

    4. 《Qt on Android核心编程》相关资源

      有不少朋友反馈在搭建 Qt on Android 开发环境时遇到了问题,诸如 Android SDK 无法下载. jdk 找不到合适的版本号.创建 AVD 出错等等.为此我把与<Qt on An ...

    5. Qt on Android 核心编程

      Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...

    6. [转] Android资源管理框架(Asset Manager)简要介绍和学习计划

      转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...

    7. Android资源管理框架(Asset Manager)简要介绍和学习计划

      文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...

    8. Android资源管理框架(Asset Manager)简介和学习计划

      Android该应用程序包括两个部分组成的:代码和资源. 资源主要是与UI相关的东西,例如UI布局.和其他字符串和照片.代码和资源可以使独立的应用程序来组织的实际需求的基础上,在执行的时候UI.,就能 ...

    9. Qt on Android: Qt 5.3.0 公布,针对 Android 改进的说明

      5月20日本,Qt 官方博客宣布 Qt 5.3.0 公布! 这个版本号聚焦在性能.稳定性和可用性的提升上,与 5.1 / 5.2 相比有非常大提升. 5.3.0 的主要变化: 稳定能.可用性大大提升 ...

    随机推荐

    1. Node.js:工具模块

      ylbtech-Node.js:工具模块 1.返回顶部 1. Node.js 工具模块 在 Node.js 模块库中有很多好用的模块.接下来我们为大家介绍几种常用模块的使用: 序号 模块名 & ...

    2. logging (日志) 模块

      本文源自景女神 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.w ...

    3. C#中DataSet中的relation

      //关系定义的方法是 DataRelation 变量名 = “DataSet对象”.Relations.Add("关系名",DataSet对象.主表.列名 , DataSet对象. ...

    4. (转载)Android 方法数超过64k、编译OOM、编译过慢解决方案。

      Android 方法数超过64k.编译OOM.编译过慢解决方案.   目前将项目中的leancloud的即时通讯改为环信的即时通讯.当引入easeui的时候 出现方法数超过上限的问题. 搜索一下问题, ...

    5. VS命令行的使用

      CD 命令是改变当前路径,但是它不会改变当前盘符,改变盘符要输入 [盘符]: 命令. 如下: Setting environment for using Microsoft Visual Studio ...

    6. DDoS攻击与防范策略

      DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 按照发起的方式 ...

    7. 京东专业“卖”队友,魅族手环将亮相1206魅蓝note新品发布会

      京东一直是国内顶级的数码产品自营销售渠道,但是,正因为庞大的数据体系和平台特殊性,经常会帮我们发现一些“好玩的”保密性较高的东西,譬如价格.信息.谍照等.而在最新上线的京东超级品牌日活动页面上,专业“ ...

    8. C# 遍历对象下的 属性

      foreach (System.Reflection.PropertyInfo p in users.GetType().GetProperties()) { var xx = p.Name; var ...

    9. 洛谷P1120 小木棍 [数据加强版]搜索

      玄学剪支,正好复习一下搜索 感觉搜索题的套路就是先把整体框架打出来,然后再一步一步优化剪枝 1.从maxv到sumv/2枚举长度(想一想,为什么) 2. 开一个桶,从大到小开始枚举 3. 在搜索中,枚 ...

    10. linux内核内存分配(一、基本概念)

      内存分配是Linux比较复杂也是比较重要的部分,这个和ssd驱动很类似:物理地址和虚拟地址的映射关系.下面总结下最近看到的有关内存分配的内容和自己的理解: 1.一致内存访问和非一致内存访问 上图来自& ...