使用 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的更多相关文章

  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. Mybatis全面详解——上(学习总结)

    原文地址:https://blog.csdn.net/ITITII/article/details/79969447 一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBat ...

  2. Eclipse RCP 中创建自己定义首选项,并能读取首选项中的值

    Eclipse RCP的插件中若想自定义首选项须要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse.u ...

  3. 【u123】最大子段和

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...

  4. Cocos2d中的Menu使用

    学习cocos2d-x中的菜单主要须要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuItem的详细子类. a. 以下来学习一下相关的类. 1. CCMenu 菜单,是CCL ...

  5. php实现构建乘积数组(算法:替换)(语法错误:分号和$符号)

    php实现构建乘积数组(算法:替换)(语法错误:分号和$符号) 一.总结 1.算法:替换 2.语法错误:分号和$符号 二.php实现构建乘积数组 题目描述: 给定一个数组A[0,1,...,n-1], ...

  6. [RxJS] Split an RxJS Observable into groups with groupBy

    groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...

  7. 枚举系统磁盘驱动器(使用GetLogicalDriveStrings API函数,system("pause"); 很实用,还用到wcslen等函数)

    代码如下: #include "stdafx.h" #include <vector> #include <string> #include <Win ...

  8. Android bitmap绘制文字自动换行

    public Bitmap getNewBitMap(String text) { Bitmap newBitmap = Bitmap.createBitmap(,, Config.ARGB_4444 ...

  9. 文件流结尾的EOF详解

    我学习C语言的时候,遇到的一个问题就是EOF. 它是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file) ...

  10. 自旋锁解决StackOverflowError案例

    本节笔者分享一个在实际工作中遇到的栈内存溢出(StackOverflowError)问题,以及其解决方案. 问题介绍:笔者负责的一个Java Web项目在启动的时候,需要有一些初始化操作,而接下来的代 ...