前言

前段时间用 QML 做一个简单的 android 程序,需要打开 android手机本地图片,原本是一个非常简单的功能,但是碰到一些坑着实的被坑了一把,然而在网上并没有找到相关的文档,这里做个总结,今后遇到同样问题的人可以绕开这个坑。

正文

打开本地文件

首先来看一下打开本地图片的方式,来看个简单的示例:

import QtQuick 2.9
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Image {id: nameanchors.fill: parentsource: "file:///storage/emulated/0/Download/1.png"}
}

这个程序够简单的了吧,需要注意的是,打开本地图片,需要在路径前面添加“file:///”,不能直接写路径
然后,编译->运行,确保该目录下有这张图片。

然而我遇到的坑就在这里,无论如何都无法显示这张图片,
直接报错:

QML Image: Error decoding: file:///storage/emulated/0/Download/1.png: Unable to read image data

我特么一度在怀疑自己这种写法是不是有问题,然后各种查资料,就是找不到问题所在。
就在一筹莫展的时候,灵机一转,换了张图片,发现特么的竟然可以了,这就让我一脸懵逼了,怎么都没想到竟然是图片的问题,可这张图片明明在本地是可以打开的啊,图片是在其他客户端截图上传并在本机通过 http 从服务器下载的 png 格式,反正就是无法加载到 QML 中使用。好在问题解决了,换成了 重新下载jpg 格式的图片就没问题。最终还是把锅推给这张图片了。

OK,接下来看其他两种更简单的加载图片方式;

打开资源文件

我想这种方式应该是最常见的了,将图片放到资源文件中,然后在代码中进行引用。示例如下:

import QtQuick 2.9
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Image {id: nameanchors.fill: parentsource: "qrc:/skin/1.jpg"}
}

与第一种方式不同的是,引用资源文件时时以“qrc:/”开头。这种方式最常用。

打开 asserts 目录下的文件

Android原生开发中的资源文件大致分为两种,一种是res目录下存放的可编译的资源文件,另一种是 asserts 目录下的用来存放原生的资源图片,系统在编译的时候不会编译assets下的资源文件,在用 Qt 做 Android 开发的时候,如果不想将图片放到 Resource 资源文件中进行编译,那就可以放到 asserts 目录下去。
引用方式如下:

import QtQuick 2.9
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Image {id: nameanchors.fill: parentsource:"assets:/skin/1.png"}
}

要想引用 assets 中的资源,先要将图片资源放到该目录下去,在 Qt 的工程文件 pro 中添加:

    imgs.files +=/skin/*imgs.path = /assets/skinINSTALLS += imgs

总结

上面说了三种在 Qt for Android 开发的时候加载图片资源的几种方式,其实每种方式的应用场景都不太一样,所以在开发过程中都有可能会遇到。

其中第一种方式,通常针对引用 Android 手机本地已经存在的图片,比如要做相片浏览功能,这就是打开本地图片,只能用file:///的方式来引用。

第二种和第三种方法,通常针对软件中的一些图标资源引用,比如说某个按钮的图片,区别就是第二种是在编译的是直接将图片打包进安装文件中,这就和 android 原生开发中的资源 res 一样,而第三种方式在编译的时候不会编译资源文件,所以解压安装包后可以直接找到该目录下包含的图标。

OK,至此介绍完了三种方法,如果在引用的时候出现无法加载的情况,首先检查调用方式是否正确,其次看路径是否正确,如果都没问题,不妨换一张图片,有可能是图片的问题。

QML for Android 加载图片资源的几种方式相关推荐

  1. ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式

    整理文档,搜刮出一个使用vue.js结合jquery ajax加载数据的两种方式的代码,稍微整理精简一下做下分享. 废话不多说,直接上代码 html代码 demo {{message }} 测试jqu ...

  2. vue.js 动态加载 html,Vue加载组件、动态加载组件的几种方式

    什么是组件: 组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HT ...

  3. Vue动态加载组件的四种方式

    动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...

  4. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  5. Android Handler加载图片的几种方式(完)

    由于原文的结构有些不是很容易看清,先整理如下: 原文:http://www.eoeandroid.com/thread-210082-1-1.html 清单文件 <?xml version=&q ...

  6. android 加载动画素材,八种APP启动界面的Loading进度条设计动效方案

    在移动端APP应用中,从用户点击图标那一瞬间到用户进入主界面这段过程,同样也决定用户对该APP应用的第一印象,如何让用户产生好感并快速熟悉应用是这一阶段重点考虑的问题.这一过程是否给用户留下好的第一饮 ...

  7. Dialog加载页面动画(Loding.....加载等待)三种方式

    方式一:帧动画切换效果(几张图片切换) 1.drawable 下创建资源(多张图片~根据自己需要) <?xml version="1.0" encoding="ut ...

  8. 让浏览器非阻塞加载javascript的几种方式

    通常大多数浏览器是并行下载资源的,但由于外部脚本的特殊性例如通过脚本改变文档的DOM结构.脚本之间的存在依赖关系.使用document.write 向页面输出HTML等.浏览器为了确保正确执行脚本和呈 ...

  9. Unity加载配置文件的两种方式

    1.当前AppDomain的配置文件(App.config或Web.config,通过AppDomain.CurrentDomain.SetupInformation.ConfigurationFil ...

最新文章

  1. linux中的for命令
  2. Current Biology | 以退为进——白逢彦组揭示酿酒酵母通过基因网络的逆向进化适应环境的新机制...
  3. 【基础】-设置VS2015开发环境
  4. NIOS2随笔——DMA(1)
  5. wordpress连不上mysql_WordPress 无法连接 Mysql8 的问题
  6. 最小二乘拟合,L1、L2正则化约束--转
  7. 提高C程序效率的10种方法
  8. TestNG中的参数化– DataProvider和TestNG XML(带有示例)
  9. 在Linux下快速搭建LAMP开发平台.doc
  10. malloc 和free设计
  11. Vue使用Mint-ui的Popup, Picker组件报错问题
  12. JavaScript世界各地时间转换为北京时间
  13. “爱装X”开源组织:“教科书级”AI知识树究竟长什么样?
  14. 自定义listview实现第一章之“初九”
  15. 【Pigeon源码阅读】RPC底层通信实现原理(八)
  16. 解决笔记本屏幕颜色偏变白问题
  17. JavaScript基础之函数截流、防抖、柯理化
  18. domino常用命令大全
  19. 三国志战略版赤壁之战如何开荒?
  20. DataFrame数据选取超全攻略

热门文章

  1. 「Innovation 2021」网易应用创新开发者大赛正式收官,十强选手精彩对决
  2. 小猿圈Java学习心得之Java程序员能力提升在哪
  3. logstash日志用于匹配多行日志
  4. Node.js实践第一天
  5. 尚硅谷公开课--struts2--2--搭建struts2环境以及struts2简单例子
  6. AMD CPU真烂!售后服务也很可恶!
  7. Windows Server 2008虚拟机ERP压力测试(5)
  8. CycleGAN非配对图像生成,定制你的卡通照
  9. 安装numpy,setuptools的时候,不能再注册表中识别出来python2.7
  10. 查看win10剩余激活时间