关于在资源中的QML文件中访问本地Image文件(Qt的Bug)

2023-11-17

        这里要讨论的内容是,将一个 QML 文件放置到 qrc 资源中后,需要访问本地目录的文件,比如图片的时候,遇到的一个在 Windows 和 Linux(MeeGo)平台下表现不一致的 Bug,以及处理方法。


        事件起因:

        一个在资源文件中的 QML 需要引用本地的图片资源。在 PC(Windows)下面运行正常,但是下到手机就是不工作,开启调试模式,发现手机里的 QML 去 qrc:/home/user/image/ 目录下面去找制定的文件去了(应该是 /home/user/image/ 目录),并报错说找不到文件,这个路径前面多出的 qrc: 显然是错误的,但是明明指定的 /home 目录怎么就跑到 qrc:/home 去了呢,这个 qrc 前缀是怎么加上的呢?


        在电脑上面运行程序的时候没有出现问题,更加奇怪,在网上搜罗一番,感谢强大的网友,已经有了回答(参考文末链接「QML Image获取资源路径的细节」):

        将 QML 文件放入资源后,可以不受影响的访问 qrc 资源中的文件和网络上的图片文件,但是如果访问本地文件,则会遇到 Qt 的一个 Bug,即在非 Windows 的平台上直接访问路径会变成 qrc 资源文件里的路径,从而出现找不到路径的错误。

        看一下这篇文章的时间,2011年5月,也就是说Qt的这个Bug在至少半年前就一直存在了,到现在还没修改!可怜


        这里摘抄原文的一段结论:

对于Image 资源路径的三个规律:

1.在没用使用qt资源系统时,Image的路径可以是绝对或者相对,并不需要特殊的表示;

2.当使用qt资源系统时,如果要特定知指向本地路径中的图片资源,那就要使用file://标示;

3.当获取网络图片资源并使用使用qt资源系统,由于有http表示存在,QML会自然去除qrc:标示。


        是不是在路径前面直接加 file:// 就解决问题了呢,经尝试,No。在非Windows环境才需要加,在Windows下加上之后又出现找不到文件的错误。


        要解决这个问题就必须引入 Qt 中关于平台相关代码的几个宏了,常用的有:

  • Q_OS_LINUX
  • Q_OS_MAC
  • Q_OS_SYMBIAN
  • Q_OS_WIN32
  • Q_WS_X11
  • Q_WS_MAC
  • Q_WS_WIN
  • Q_WS_S60

        Q_OS_ 是指定适用的操作系统,Q_WS_ 是指定适用的窗口系统,一般选其中一种即可,具体的用法略去,普通C++宏。


参考链接:

QML Image获取资源路径的细节
http://mobile.51cto.com/symbian-261878.htm
Qt:平台相关的代码写法
http://blog.csdn.net/hufeng825/article/details/5748680


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于在资源中的QML文件中访问本地Image文件(Qt的Bug) 的相关文章

  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 如何使网页中出现的图标闪烁/闪烁

    几天前我开始研究高级java 我知道太晚了 我被困在使图标 出现在任务栏上 闪烁的特定任务上 这种闪烁应该根据特定条件发生 这意味着可以使用以下方法来实现javascript 我已经搜索了一段时间了 但是有没有办法让图标每隔 1 秒左右出现
  • QToolButton:更改菜单位置

    使用菜单时QToolButton菜单显示在按钮的正下方 有没有办法在按钮的左侧 右侧显示菜单 我知道这个问题不久前已得到回答 但我想为此问题添加新答案 因为接受的答案不再有效 实际上 更改 QToolButton 上的菜单位置非常容易 您需
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 退出 Qt 程序的正确方法?

    我应该如何退出 Qt 程序 例如在加载数据文件时 发现文件损坏 并且用户需要退出该应用程序或重新启动数据文件 我是不是该 call exit EXIT FAILURE call QApplication quit call QCoreApp
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • 如何使用 python 在 Windows 中禁用/启用特定 USB 端口? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在图形窗口中创建一个切换开关 可以使用 python 禁用 启用 Windows 中的特定 USB 端口 我可以使用哪个外部命令或
  • 如何使用 Perl CGI 脚本提供图像?

    我的 Google fu 让我失望了 如何使用 Perl 提供已生成的图像 Example img src getimage pl getimage pl 里有什么 干得好 usr bin perl w my file inner nav
  • 使用 ImageMagick/convert 创建半透明 PNG

    我有 PNG 文件 我想将整个图像转换为半透明 该图像将在 KML 文件中引用为 Google 地球 地图中使用的图标叠加层 使用 ImageMagick 向我建议了以下示例convert命令 但似乎都不起作用 第一个示例会导致错误 usr
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 无法在带有 QSortFilterProxyModel 的 QTreeView 的点击信号中使用 itemFromIndex

    我有一个 QTreeView 在视图和 QStandardItemModel 之间有一个 QSortFilterProxyModel 来对树进行排序 然后我想通过 clicked 信号对视图中的点击进行操作 模型 视图的设置类似于 mymo
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • 如何检测QTableView中的双击

    我正在使用 PyQt 创建 GUI 应用程序 在继承自 QTableView 的视图中 需要检测用户双击行时选择的行 该表可以排序 但不能编辑 我该怎么做 注意 尝试了 doubleClicked int 信号 它是由鼠标按钮发出的 而不是

随机推荐

  • 算法基础:k最近邻算法

    本博客所有内容均整理自 算法图解 欢迎讨论交流 了解过机器学习这个概念 一定知道有一种名为k最近邻的算法 简称KNN 对于k最近邻算法的定义 百度百科是这样给出的 K最近邻 k Nearest Neighbor KNN 分类算法 是一个理论
  • 异常类的定义、种类、抛出、声明和捕获

    目录 异常类定义 异常处理的必要性 异常处理 Java常见异常种类 1 Error 2 Exception 1 运行异常类Runtime Exception 2 非运行异常类Non RuntimeException 常见异常类 抛出异常th
  • 大话oracle rac 集群,大话Oracle RAC:集群、高可用性、备份与恢复

    第1部分 集群理论篇 第1章 RAC初体验 2 1 1 本书使用环境 3 1 1 1 硬件环境 3 1 1 2 软件环境 4 1 1 3 本书使用的环境 6 1 2 如何在PC机上搭建RAC环境 8 1 2 1 需要下载的软件 8 1 2
  • 拒绝服务攻击 - 学习笔记

    拒绝服务攻击 学习笔记 前言 概述 拒接服务攻击是目前来说 较为难以防御的攻击方式之一 其防御的难点在于难以分辨 正常用户与恶意用户 同时 随着攻击模式的进步 花样也越来越多 但是 服务器方也升级了安全策略 传统上 单机的 Dos 攻击已经
  • java设计6大原则总结

    1 开闭原则 Open Close Principle 定义 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 开放 封闭原则的意思就是说 你设计的时候 时刻要考虑 尽量让这个类是足够好 写好了就不要去修改了 如果新需求来 我们增加一
  • 【亲测有效新手教程】Vscode连接远程服务器编辑并运行深度学习代码

    文章目录 前言 使用步骤 1 安装OpenSSH 2 安装Remote SSH 参考链接 前言 在服务器上通过桌面已经配置好了深度学习的环境 并且存放了相关代码以及数据集 之前使用向日葵连接服务器进行代码编写 使用下来发现有延迟 不够丝滑
  • Kotlin如何提供与Java的100%互操作性?

    Kotlin与Java可以100 互操作 当您在每篇博客文章 社区话题或YouTube上首次搜索有关Kotlin的信息时 如果该话题是关于Kotlin的 那么这个词肯定在每个人的名单上都表明Kotlin可与Java 100 互操作 让我们看
  • 几个值得研究的工具

    一 DLIB库 C 实现的机器学习算法库 有离线的人脸识别SDK 比openCV里的人脸识别库效果好 除了这个库 要找到合适的离线版本的人脸识别库很难 国内的阿里 腾讯 百度 都没有离线SDK 都是在线的 二 KEEL 工具 是一款开源的数
  • php使用smtp发送邮件(ssl链接方式)

    在这里我要介绍的是如何使用smtp进行发送邮件 分别介绍了普通链接和ssl链接两种方式 一 准备材料 smtp类下载地址 https download csdn net download panjiapengfly 10688054 二 代
  • 甲骨文发布适用于 MongoDB 的 Oracle Database API;Chrome 和 Edge 互相“拉踩”;树莓派驱动程序现可在 Android 上运行

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 倪光南 可适当聚焦 RISC V
  • C++随机数之default_random_engine

    头文件 include
  • kafka中partition数量与消费者对应关系

    kafka是由Apache软件基金会开发的一个开源流处理平台 kafka是一种高吞吐量的分布式发布订阅消息系统 它可以处理消费者在网站中的所有动作流数据 kafka中partition类似数据库中的分表数据 可以起到水平扩展数据的目的 比如
  • Extjs IE内存问题

    1 使用了ExtJS 3 1并且更改了模块加载方式之后 我的OPOA内存回收有所改进 记录一下概要 1 不用autoload url url scripts true 的方式 而使用eval response responseText 方式
  • 家乐氏董事会批准将于10月2日分拆为两家公司

    美通社消息 家乐氏公司宣布 其董事会正式批准之前宣布的分拆为两家独立上市公司 Kellanova 和 WK Kellogg Co 的计划 2023 年 10 月 2 日完成分拆后 家乐氏公司将更名为 Kellanova Kellanova
  • java笔记:接口的特征和使用

    接口 1 接口的定义 修饰符 interface 接口名 extends 父接口1 父接口2 零个到多个常亮定义 零个到多个抽象方法定义 零个到多个内部类 接口 枚举定义 零个到多个默认方法或类方法定义 修饰符可以为public或者省略 d
  • Java必备技能之环境搭建篇(基础环境)详细版

    本文都是 基于Window环境搭建 Java开发必备环境搭建 开发环境简图 基础版没有加入docker 本文重点在于基础环境 后期将在linux上 搭建基于容器化docker的开发部署环境 搭建思路 先单独搭建 最后集成搭建并配置 1 在w
  • 产品思维训练

    本周话题 现在P2P 平台新客户的拓展需要经过注册 绑卡 含实名认证 充值 交易几个步骤 从数据发现注册到绑卡这一步流失率很高 请分析一下原因 Bob 王 好多人记不住卡号 所以注册时不绑卡 一步步来可能流失率低些 另 注册一般就损失个人信
  • 安装live-server后启动时报错:bash: live-server: command not found

    live server详解 介绍以及安装 一 关于live server的介绍 live server插件实现了 修改文件浏览器自动刷新 浏览器自动打开项目 本地开发搭建临时的服务 二 关于live server的安装 1 安装node j
  • Qt第三十三章:阴影QGraphicsDropShadowEffect

    简单阴影 为QLabel QPushButton加阴影 class TestShadow QWidget def init self parent None super TestShadow self init parent self re
  • 关于在资源中的QML文件中访问本地Image文件(Qt的Bug)

    这里要讨论的内容是 将一个 QML 文件放置到 qrc 资源中后 需要访问本地目录的文件 比如图片的时候 遇到的一个在 Windows 和 Linux MeeGo 平台下表现不一致的 Bug 以及处理方法 事件起因 一个在资源文件中的 QM