当前位置: 首页 > article >正文

Qt在模块依靠情况下资源文件名称和资源名称的使用限制

概述

在Qt中使用添加资源文件的时候,对于资源文件名称的定义,往往是较为随意的。
但是当涉及到Qt库依赖的时候,则可能需要遵守一定的规则,否则可能出现文件找不到或者错误加载的问题。

环境

环境名称Qt 版本系统版本
LinuxQt 5.12.7 ,MSVC 2017win 11 x64
WindowsQt 5.12.7SUSE Linux 15.3

描述

如下图所示,模块A是一个可执行程序,模块B和模块C是两个库。模块之间存在依赖关系,如下:模块A依赖模块B和模块C,模块B也同时依赖模块C。
模块之间的依赖关系

当这三个模块都有资源文件,如下所示:
存在同名资源文件
其中,模块B和模块C的资源文件是相同的文件名称res.qrc
当这三个模块分别编译的时候,没有出现任何问题;实际在运行的时候,在Linux(尝试的系统是SUSE 15.3)上可能会出如下问题:

":/images/img3.png" Cannot find.

这样发现在Linux下会屏蔽同名的资源文件,使得其中的资源找不到;在Windows上没有找到类似问题。

为了解决以上问题,将依赖库中的同名资源文件名称修改成不同, 如下所示:
模块中的资源名称不同名
再次运行,发现上述问题已经解决。

再次观察,resB.qrcresC.qrc 中的资源存在同名问题,都存在:/images/img1.png文件 ,但是实际上两者是不同的资源,只不过是在各自模块中的名称相同。
当在模块B和模块C中都分别用到了各自的资源,在模块A中分别调用模块B和模块C中依赖的资源,这时候发现在Linux和Windows上调用都出现了问题,它们都将其识别成了同一个文件,例如:本应该各自模块显示各自的图像,现在显示成相同的图像了。
这时候就需要注意,即使在不同的存在依赖性的模块中,也需要区分资源文件的路径名称。

汇总

问题名称Linux 情况Windows情况建议
依赖模块中的资源文件名相同存在问题情况良好不同模块的资源文件使用不同的名称
资源文件中路径相同存在问题存在问题资源文件中,不同模块使用不同的资源前缀

http://www.kler.cn/a/612202.html

相关文章:

  • HTML 与 JavaScript 交互:学习进程中的新跨越(一)
  • 2025选择手机之我见
  • 抽象工厂设计模式及应用案例
  • 【MySQL】MySQL结构体系及核心组件功能是怎样的?
  • stm32week8
  • gogs私服搭建
  • 代码随想录算法训练营Day12 | Leetcode 226翻转二叉树、101对称二叉树、104二叉树的最大深度、111二叉树的最小深度
  • Eclipse IDE for ModusToolbox™ 3.4环境通过JLINK调试CYT4BB
  • 【408--复习笔记】数据结构
  • LeetCode19删除链表的倒数第N个结点
  • 单片机内存划分总览与介绍
  • 《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战
  • 【C++】httplib:轻量级的 HTTP 服务器和客户端
  • vue 双向绑定的原理是什么
  • Linux Namespace(网络命名空间)系列三 --- 使用 Open vSwitch 和 VLAN 标签实现网络隔离
  • Redis 性能数据解读与问题排查优化版
  • 基于Flask的防火墙知识库Web应用技术解析
  • python爬虫PyQt简介
  • 【QT5 多线程示例】信号量
  • C++学习笔记(二十九)——list