1.Qt资源系统简介

Qt 资源系统是一种独立于平台的资源管理器,用于在应用程序的可执行文件中存储二进制文件。如果应用程序始终需要一组特定的文件(图标、翻译文件等),使用Qt资源管理系统可以有效防止应用文件丢失。简而言之,Qt资源系统就是桌面应用中的静态文件管理器。

Qt资源系统基于qmakerccQt 的资源编译器)和QFile

2.qrc文件

qrc是一种基于XML格式的文件,应用使用的资源文件在拓展名为qrc的文件中声明。qrc文件中声明的资源文件是应用源代码的一部分,其中的文件路径是相对于qrc文件所在目录的相对路径。因此qrc中声明的资源文件必须和qrc文件处于同一目录或者是该目录的子目录

资源文件可以直接随源代码编译到应用可执行文件中,在代码中直接调用,也可以先创建资源文件然后使用代码注册到资源系统中。例如声明一张图片:

<file>images/cut.png</file>

3.引用资源

声明资源后,可以在程序中用:/前缀或者以qrc为命名的URL访问。例如引用相对于qrc文件所在目录的图片images/cut.png可以用:/images/cut.png或者qrc:///images/cut.png。

如果不想每次都输入这么长的路径,可以使用alias属性,即

<file alias="cut-img.png">images/cut.png</file>

这样可以使用:/cut.png访问图片images/cut.png

4.路径前缀

使用路径前缀可以将不同目录下的文件组合到一个命名空间中,便于在不移动文件的前提下,以统一的路径前缀访问不同路径下文件,相当于对文件做了虚拟分类。

<qresource prefix="/myresources"><file alias="cut-img.png">images/cut.png</file><file alias="icon.png">icons/icon.png</file>
</qresource>

现在可以使用:/myresources/cut-img.png访问cut-img.png, 使用:/myresources/icon.png访问icon.png

注意

(1)不加别名时,文件引用方式是:/文件相对于qrc文件路径,例如

<file >images/cut.png</file>

的引用方式是 :/images/cut.png

(2)加前缀时,文件引用方式是:/前缀/文件相对于qrc文件路径

<file prefix="/icon">images/cut.png</file>

变为:/icon/images/cut.png。

(3)加别名和前缀时:/前缀/文件别名

<qresource prefix="/icon"><file alias="cut-img.png">images/cut.png</file>
</qresource>

变为 :/icon/cut.png。

5.文件国际化

有些时候应用可能需要在不同的语言环境下使用不同的文件,使用lang属性可以轻松做到这一点:

<qresource><file>cut.jpg</file>
</qresource>
<qresource lang="fr"><file alias="cut.jpg">cut_fr.jpg</file>
</qresource>

当系统语言切换成法语时,对cut.jpg的引用将会自动切换成cut_fr.jpg,当系统语言是其它语言时,将会引用cut.jpg。

6.编译qrc文件为python模块

要在pyside6项目中引用qrc文件,需要使用rcc工具将其编译为python模块,编译工具是pyside6-rcc。例如下面的qrc文件:

<RCC><qresource prefix="/icon"><file>icon/ic_last_step.svg</file><file>icon/ic_next_step.svg</file><file>icon/ic_start.svg</file></qresource>
</RCC>

qrc文件所在目录运行 编译命令:

 pyside6-rcc res.qrc -o res.py

生成res.py 即资源模块

7.应用示例

下面以设置应用按钮图标为例说明如何使用Qt资源管理器管理图标文件。图标文件可以从阿里云图标库下载:iconfont-阿里巴巴矢量图标库。

(1)创建图标qrc文件

新建一个pyside6项目,目录结构如下:

将图标保存在resource/icon下。

小技巧

pycharm中直接编辑qrc文件很繁琐,使用Pyside6开发Qt程序的老铁们不妨装一个官方的QtCreator,这样可以快速编辑很多Qt文件,还有很多代码示例可以看,另外还可以用QtCreator快速生成很多模板代码,排查Qt文件中错误等。

Q:为啥不直接用QtCreator开发Pyside6项目?

A:QtCreator的代码编辑器太垃圾了,使用Pycharm快到飞起。

现在打开QtCreator新建这个res.qrc文件,把图标路径加进来:

创建文件后,先添加一个icon前缀:

然后使用Add Files按钮把图标文件添加到路径中,然后保存:

现在得到以下的qrc文件:res.qrc

<RCC><qresource prefix="/icon"><file>icon/ic_last_step.svg</file><file>icon/ic_next_step.svg</file><file>icon/ic_start.svg</file></qresource>
</RCC>

为了缩短引用路径,给每个图标文件取个别名(alias):

现在得到这样的qrc文件:

<RCC><qresource prefix="/icon"><file alias="ic_last_step">icon/ic_last_step.svg</file><file alias="ic_next_step">icon/ic_next_step.svg</file><file alias="ic_start">icon/ic_start.svg</file></qresource>
</RCC>

(2)编译qrc文件为python模块

在这个qrc文件所在目录运行命令:

 pyside6-rcc res.rc -o res.py

如果不在这个目录运行,res.qrcres.py要改成绝对路径或者相对于命令运行目录的相对路径。

运行完可以看到res.qrc文件所在目录多了一个res.py文件,打开看看:

# Resource object code (Python 3)
# Created by: object code
# Created by: The Resource Compiler for Qt version 6.1.3
# WARNING! All changes made in this file will be lost!from PySide6 import QtCoreqt_resource_data =b"......"qt_resource_name = b"......"qt_resource_struct = b"......"def qInitResources():QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)def qCleanupResources():QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)qInitResources()

可以看到文件中包含三个二进制编码的字符串:

qt_resource_dataqrc源码,其中还包含了矢量图标的svg代码。

qt_resource_name:资源名称;

qt_resource_struct:资源二进制文件结构;

还有两个Python函数:

qInitResources:初始化资源,调用了qRegisterResourceData方法在应用中注册资源。qCleanupResources:清除资源,调用了qUnregisterResourceData方法在应用中卸载资源。

提示

编译完成后,资源源文件可以删除了,比如上述icon中的图标文件可以全部删除。

(2)在程序中引用资源文件

创建main.py

import random
import sysfrom PySide6 import QtWidgets, QtCore
from PySide6.QtGui import QPixmap, QIcon
from PySide6.QtWidgets import QGridLayout
import resource.res as resclass MyWidget(QtWidgets.QWidget):def __init__(self):super().__init__()self.text = QtWidgets.QLabel("Hello World")self.layout = QtWidgets.QVBoxLayout(self)self.layout.addWidget(self.text)# 按钮布局self.btn_layout = QGridLayout()# 创建三个按钮self.button_last_step = QtWidgets.QPushButton()# 按钮图标self.button_last_step.setIcon(QPixmap(":/icon/ic_last_step"))self.btn_layout.addWidget(self.button_last_step, 0, 0)self.button_start = QtWidgets.QPushButton()self.button_start.setIcon(QPixmap(":/icon/ic_start"))self.btn_layout.addWidget(self.button_start, 0, 1)self.button_next_step = QtWidgets.QPushButton()self.button_next_step.setIcon(QPixmap(":/icon/ic_next_step"))self.btn_layout.addWidget(self.button_next_step, 0, 2)# 添加按钮布局到窗口布局中self.layout.addLayout(self.btn_layout)if __name__ == "__main__":app = QtWidgets.QApplication([])widget = MyWidget()widget.resize(400, 300)widget.show()sys.exit(app.exec())

运行效果:

pyside6(1):Qt 资源系统和qrc文件使用相关推荐

  1. Qt资源文件.qrc

    目录 一 用途 二 使用效果 三 如何添加资源文件 一 用途 有时候我们想添加图片或者动画的话,就可以使用资源文件 二 使用效果 我在标签上添加了一个蝴蝶的图片,最后呈现出来的效果就是这样子的 三 如 ...

  2. 【Qt】.qrc文件为项目添加图片、动画、音效、视频等资源文件

    Qt添加资源文件到项目中 Qt添加资源文件到项目中的方法如下: 首先在项目上单击鼠标右键,选择添加[新文件],选择[Qt]-[Qt Resource File],点击[下一步]: 输入文件名,比如re ...

  3. qt qrc html,写一个QT资源文件(qrc)

    一个.qrc 文件的例子: images/copy.png images/cut.png images/new.png images/open.png images/paste.png images/ ...

  4. qrc路径_Windows下 Qt 资源文件(.qrc)文件 的 编写与应用

    最近遇到一些项目都包含了qrc文件,这个是Qt的资源文件,如果在pro文件中不包含的话,在编译的时候会提示找不到相应资源的错误. 下面说一下手动修改pro和编写qrc文件的方法. 我们直接在命令行下执 ...

  5. QT 添加资源.qrc文件(My Sources File 图片 音频 支持翻译的.qm文件)

    QT 添加资源 .qrc文件 我们只用QT做项目,一般会用到一些图片,声音灯资源,在项目中添加资源可以写绝对路径,也可以将资源添加到我们项目中,在后期打包的时候,也方便. 步骤如下: 1.准备添加资源 ...

  6. pyqt5从子目录加载qrc文件_实战PyQt5: 045-添加资源文件

    添加资源文件 在使用PyQt进行图形界面开发的时候不免要用到一些外部资源,比如图片,qss配置文件等.在前面代码中,遇到这类问题,我们使用绝对路径的方式来解决,这种方式,本身有其不方便之处(比如,调整 ...

  7. opengl png图片 qt_Qt资源文件的格式,并用CMake添加Qt资源文件

    目录 ......QRC文件的写法用CMake添加Qt资源文件添加QRC文件的函数步骤CPP中使用QRC文件使用QRC文件实例程序结果QRC文件CMakeLists.txt文件Dialog.h文件Di ...

  8. qt designer 建qrc文件供Eric6使用步骤

    一.通过Qt Designer新建qrc文件:在窗口拖拽一个TextEdit,双击TextEdit窗口空白处,插入图片点击编辑资源,在左边窗口单击右键出现下图,点击新建,创建qrc文件,在右边窗口向q ...

  9. Mysql复习计划(一)- 字符集、文件系统和SQL执行流程

    Mysql复习计划(一)- 字符集.文件系统和SQL执行流程 前言 一. Mysql字符集 1.1 Mysql5.7和8.0的默认字符集 1.1.1 修改默认的字符集 1.1.2 修改已有库表的字符集 ...

  10. QT资源加载之rcc文件

    Qt资源加载之rcc文件 qrc文生成*.rcc 如何使用rcc文件 最近get了一个新技能,那就是rcc文件的使用.感觉瞬间释然了几个以前纠结的问题 问题来源: 使用Qt做UI的宝宝们肯定会遇到使用 ...

最新文章

  1. java连接mysql8
  2. 拔最多的鹅毛,听最少的鹅叫
  3. 从Java代码到Java堆理解和优化您的应用程序的内存使用
  4. VTK:图片之ImageMandelbrotSource
  5. php中有size_t函数吗,lSize 命令/方法/函数
  6. freebsd从安装到想要的状态配置
  7. Sqoop数据迁移工具的使用
  8. 实例23:python
  9. mysql修改用户密码1133_后台修改mysql用户密码后无法连接
  10. IFIX和Historian历史数据曲线图
  11. python batch_size_深度学习中的batch的大小对学习效果有何影响?
  12. python数据分析之matplotlib绘图
  13. ModuleNotFoundError: No module named ‘项目同名.settings’
  14. ThinkPad键盘失灵解决办法
  15. c语言怎么让程序换页,c语言编程系统,如何换页显示?
  16. Electron“安装已中止,安装程序未成功地运行完成”
  17. 知乎,挣钱?果然具有长尾效应
  18. Baklib每日分享|在线产品手册的制作技巧
  19. 一个手握安兔兔,一个执掌鲁大师,周鸿祎雷军这场仗谁能赢?
  20. 基于STM32使用TTP223点动触摸传感器模块

热门文章

  1. 使用ffmpeg下载m3u8流媒体
  2. 二次与三次B样条曲线c++实现
  3. Cesium笔记之加载GIF图
  4. matlab机器学习之朴素贝叶斯实例分析
  5. 有限元分析法matlab,用MATLAB进行结构的有限元法分析
  6. python中文分词+词频统计
  7. 综合布线系统工程设计规范GB50311-2007
  8. mac录制视频——OBS
  9. 学习笔记之——LaTeX的使用
  10. 5款开源BI系统倾力推荐,企业信息化的利器