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

PySide6的资源文件(.qrc 文件)简介以及RCC工具


 .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()


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

相关文章:

  • Kbengine+Unity3D多人在线游戏服务器+客户端从源码详细搭建教程
  • FPGA EDA软件的位流验证
  • 数据仓库基础常见面试题
  • 云服务信息安全管理体系认证,守护云端安全
  • WINFORM - DevExpress -> devexpress版--报表(report)
  • 无源器件-电容
  • ssm旅游攻略网站设计+jsp
  • 深入理解循环神经网络(RNN):原理、应用与挑战
  • springCloud特色知识记录(基于黑马教程2024年)
  • Android SystemUI——服务启动流程(二)
  • excel按行检索(index+match)
  • 利用Python爬虫获取item_search_shop-获得店铺的所有商品API接口
  • AI时代来了,我们不再需要IDE了
  • C语言进阶-2指针(一)
  • 智能网联汽车技术底盘线控技术
  • python发送get请求与post请求
  • 【前端】自学基础算法 -- 19.树的广度优先搜索
  • 08cms房产系统开源源码与链家房产系统小程序源码两套的安装教程步骤大同小异
  • 各种特种无人机快速发展,无人机反制技术面临挑战
  • List详解 - 双向链表的操作
  • PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析
  • Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书
  • 什么叫慢查询 ?什么情况下出现?怎么解决,怎么优化 在微服务中
  • 《Java核心技术II》用Java连接到服务器
  • QT跨平台应用程序开发框架(2)—— 初识QT
  • 充电平台架构图demo