.qrc 文件
.qrc 文件是 Qt 资源系统(Qt Resource System)的一部分,用于定义应用程序的资源集合。这些资源可以是图像、图标、样式表、音频文件等。
.qrc 文件的格式
.qrc 文件使用 XML 格式编写,下面将详细介绍 .qrc 文件的格式及其各个组成部分。
基本结构
一个典型的 .qrc 文件的基本结构如下:
<!DOCTYPE RCC><RCC version="1.0">
<qresource><file>path/to/resource1</file><file>path/to/resource2</file>
</qresource>
</RCC>
主要部分解释
1. <RCC> 根元素:
• <RCC> 是 .qrc 文件的根元素,它包含一个 version 属性,指定资源文件的版本。通常使用 "1.0"。
• 示例: <RCC version="1.0">
2. <qresource> 元素:
• <qresource> 是包含所有资源文件的容器。每个资源文件需要列在 <file> 元素中。
• 可以添加 prefix 属性来为资源文件指定一个前缀路径。
• 示例: <qresource prefix="/icons">
<file>icon1.png</file>
<file>icon2.png</file>
</qresource>
3. <file> 元素:
• <file> 元素定义了一个资源文件的相对路径。路径是相对于 .qrc 文件所在目录的。
• 示例: <file>images/image1.png</file>
使用 prefix 属性 通过使用 <qresource> 元素的 prefix 属性,可以为资源文件指定一个虚拟路径前缀。这对于组织和分类资源非常有用。
例如:
<RCC version="1.0">
<qresource prefix="/icons"><file>icon1.png</file><file>icon2.png</file>
</qresource>
<qresource prefix="/styles"><file>style.qss</file>
</qresource>
</RCC>
在这个例子中,资源文件可以通过以下路径访问:
/icons/icon1.png,
/icons/icon2.png,
/styles/style.qss
其他可选属性
1. lang 属性:
• 可以为 <qresource> 元素指定 lang 属性,用于多语言资源的管理。
• 示例:
<qresource lang="en">
<file>en/welcome.txt</file>
</qresource>
<qresource lang="fr"><file>fr/welcome.txt</file>
</qresource>
2. alias 属性:
• 可以为 <file> 元素指定 alias 属性,为资源文件指定一个别名。
• 示例:
<qresource><file alias="main_icon">icons/icon.png</file>
</qresource>
一个完整的 .qrc 文件示例
<!DOCTYPE RCC><RCC version="1.0">
<qresource><file>images/logo.png</file><file>images/background.jpg</file>
</qresource>
<qresource prefix="/icons"><file>icons/icon1.png</file><file>icons/icon2.png</file>
</qresource>
<qresource prefix="/styles"><file>styles/default.qss</file>
</qresource>
<qresource lang="en"><file>translations/en.qm</file>
</qresource>
<qresource lang="fr"><file>translations/fr.qm</file>
</qresource>
</RCC>
使用Qt Designer新建.qrc文件的方法
• 如果使用designer来设计界面文件,在designer的右下角的资源管理器也可以添加和编辑资源文件:
1、新建资源文件:
• 点击“编辑资源”按钮
• 点击“新建资源文件”按钮
• 添加资源:
新建资源后,可以看到一个空白的资源列表:
• 要添加资源文件,可以点击窗口底部的`Add`(添加)按钮,然后选择要添加的资源类型,如`Add Files`(添加文件)来添加图片、文本文件等,或者选择`Add Prefix`(添加前缀)来为资源设置一个前缀,方便组织和管理资源。
• 例如,添加一个图片资源,点击`Add Files`后,在弹出的文件选择对话框中,找到并选择要添加的图片文件,点击`Open`(打开)按钮,图片文件就会被添加到资源列表中,并且会自动生成一个别名,别名默认为文件名,也可以手动修改别名。
• 保存.qrc文件。
总结
.qrc 文件使用 XML 格式定义了应用程序的资源集合,允许通过路径前缀(prefix)和别名(alias)来组织和管理资源。这种结构使得资源的管理和访问更加清晰和方便。
RCC工具
在使用 PySide6 进行开发时,管理应用程序的资源(如图标、图片、样式表等)是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc,它能够将资源文件(.qrc)编译成 Python 模块,从而使这些资源可以被应用程序轻松地加载和使用。
使用步骤
1. 创建资源文件 (.qrc)
• 首先,创建一个资源文件(.qrc )文件,这个文件定义了应用程序所使用的资源。
• 例如,创建一个名为 resources.qrc 的文件,内容如下:
<!DOCTYPE RCC><RCC version="1.0">
<qresource><file alias="logo.png">images/logo.png</file><file alias="style.qss">styles/style.qss</file>
</qresource>
</RCC>
在这里使用了alias属性为资源文件指定了一个别名,若不使用 alias ,则默认使用文件的原始路径作为引用路径。。
2. 使用 pyside6-rcc 工具生成 Python 模块
• 使用 pyside6-rcc 工具将 .qrc 文件编译成 Python 模块。
• 打开终端,导航到包含 resources.qrc 文件的目录,然后运行以下命令:
pyside6-rcc -o resources_rc.py resources.qrc
这个命令会生成一个名为 resources_rc.py 的 Python 文件,这个文件包含了所有资源的二进制数据。
• 如果在pycharm的外挂工具中配置过pyside6-rcc ,在pycharm中鼠标右键,在弹出菜单的外挂工具中选择RCC工具也可以生成.py的Python 文件。
3. 在应用程序中导入生成的资源模块,并使用图像资源
在应用程序脚本中,导入生成的 resources_rc.py 模块,以便应用程序可以访问这些资源。
from PySide6.QtWidgets import QApplication, QLabel
from PySide6.QtGui import QPixmap
import sys
import resource_rc # 导入资源文件if __name__ == '__main__':app = QApplication(sys.argv)label = QLabel()label.setMinimumSize(300, 300)pixmap = QPixmap(":/logo.png") # 使用资源前缀和别名加载图片label.setPixmap(pixmap)label.show()sys.exit(app.exec())
注意字符串前面需要用“:”冒号开始。
. 使用图像资源作为窗口的图标
from PySide6.QtWidgets import QApplication, QWidget
import resource_rc # 导入资源文件app = QApplication([])
app.setStyleSheet(":/style.qss") # 使用资源前缀和别名加载样式表
window = QWidget()
window.setWindowIcon(QIcon(":/icon.png"))
window.show()
app.exec()
使用其他资源
除图像资源以外的其他多种资源的使用:
. 使用样式表资源:
from PySide6.QtWidgets import QApplication, QWidget
import resource_rc # 导入资源文件app = QApplication([])
app.setStyleSheet(":/style.qss") # 使用资源前缀和别名加载样式表
window = QWidget()
window.show()
app.exec()
. 使用字体资源:
假设 resource.qrc 中添加了字体资源,内容如下:
<RCC>
<qresource><file alias="customFont">fonts/MyCustomFont.ttf</file>
</qresource>
</RCC>
使用该字体资源的代码:
from PySide6.QtWidgets import QApplication, QLabel
from PySide6.QtGui import QFontDatabase, QFont
import resource_rc # 导入资源文件app = QApplication([])
# 加载字体
font_id = QFontDatabase.addApplicationFont(":/customFont")
font_family = QFontDatabase.applicationFontFamilies(font_id)[0]
font = QFont(font_family)
# 使用字体
label = QLabel("Hello, world!")
label.setFont(font)
label.show()
app.exec()
. 使用音频视频资源:
假设 resource.qrc 中添加了音频视频资源,内容如下:
<RCC>
<qresource><file alias="sampleVideo">media/sample_video.mp4</file><file alias="sampleAudio">media/sample_audio.mp3</file>
</qresource>
</RCC>
使用该音频视频资源的代码:
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout
from PySide6.QtMultimedia import QMediaPlayer, QMediaContent
from PySide6.QtMultimediaWidgets import QVideoWidget
import resource_rc # 导入资源文件app = QApplication([])
window = QWidget()
layout = QVBoxLayout(window)
# 设置视频播放器
video_widget = QVideoWidget()
player = QMediaPlayer()
player.setVideoOutput(video_widget)
player.setMedia(QMediaContent(QUrl("qrc:/sampleVideo")))
video_widget.show()
player.play()
# 添加到布局
layout.addWidget(video_widget)
window.setLayout(layout)
window.show()
app.exec()