使用fqrc文件

Qt资源系统是一种在应用程序中存储二进制文件的机制。

这些文件将嵌入到应用程序中,并且可访问类和 类的构造函数,这些类使用以 开头的特殊文件名来获取文件名。QFileQIconQPixmap:/

最常见的用途是自定义图像,图标,字体等。

在本教程中,您将学习如何将自定义图像加载为按钮图标。

为了获得灵感,我们将尝试改编Qt中的多媒体播放器示例。

如下图所示,用于媒体操作(播放、暂停、停止等)的 QPushButton 使用的是用于此类操作的默认图标。

Multimedia Player Qt Example

您可以通过设计图标使应用程序更具吸引力,但是如果您不想设计它们,请下载以下设置并使用它们。

New Multimedia icons

您可以在 Qt 资源系统站点中找到有关 rcc 命令、.qrc 文件格式以及一般资源系统的更多信息。

.qrc 文件

在运行任何命令之前,请将有关资源的信息添加到 .qrc 文件。在以下示例中,请注意资源在 icons.qrc 中的列出方式

</ui>
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>icons/play.png</file>
    <file>icons/pause.png</file>
    <file>icons/stop.png</file>
    <file>icons/previous.png</file>
    <file>icons/forward.png</file>
</qresource>
</RCC>

生成蟒蛇文件

现在图标 .qrc 文件已准备就绪,请使用 pyside6-rcc 工具生成一个包含有关资源的二进制信息的 Python 类

为此,我们需要运行:

pyside6-rcc icons.rc -o rc_icons.py

-o 选项允许您指定输出文件名,在本例中rc_icons.py该文件名。

要使用生成的文件,请在 Python 主文件的顶部添加以下导入:

import rc_icons

代码中的更改

修改现有示例时,需要修改以下行:

from PySide6.QtGui import QIcon, QKeySequence
playIcon = self.style().standardIcon(QStyle.SP_MediaPlay)
previousIcon = self.style().standardIcon(QStyle.SP_MediaSkipBackward)
pauseIcon = self.style().standardIcon(QStyle.SP_MediaPause)
nextIcon = self.style().standardIcon(QStyle.SP_MediaSkipForward)
stopIcon = self.style().standardIcon(QStyle.SP_MediaStop)

并将它们替换为以下内容:

from PySide6.QtGui import QIcon, QKeySequence, QPixmap
playIcon = QIcon(QPixmap(":/icons/play.png"))
previousIcon = QIcon(QPixmap(":/icons/previous.png"))
pauseIcon = QIcon(QPixmap(":/icons/pause.png"))
nextIcon = QIcon(QPixmap(":/icons/forward.png"))
stopIcon = QIcon(QPixmap(":/icons/stop.png"))

这可确保使用新图标,而不是应用程序主题提供的默认图标。请注意,这些行不是连续的,而是位于文件的不同部分。

完成所有导入后,添加以下内容

import rc_icons

现在,类的构造函数应如下所示:

def __init__(self):
    super(MainWindow, self).__init__()

    self.playlist = QMediaPlaylist()
    self.player = QMediaPlayer()

    toolBar = QToolBar()
    self.addToolBar(toolBar)

    fileMenu = self.menuBar().addMenu("&File")
    openAction = QAction(QIcon.fromTheme("document-open"),
                         "&Open...", self, shortcut=QKeySequence.Open,
                         triggered=self.open)
    fileMenu.addAction(openAction)
    exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit",
                         self, shortcut="Ctrl+Q", triggered=self.close)
    fileMenu.addAction(exitAction)

    playMenu = self.menuBar().addMenu("&Play")
    playIcon = QIcon(QPixmap(":/icons/play.png"))
    self.playAction = toolBar.addAction(playIcon, "Play")
    self.playAction.triggered.connect(self.player.play)
    playMenu.addAction(self.playAction)

    previousIcon = QIcon(QPixmap(":/icons/previous.png"))
    self.previousAction = toolBar.addAction(previousIcon, "Previous")
    self.previousAction.triggered.connect(self.previousClicked)
    playMenu.addAction(self.previousAction)

    pauseIcon = QIcon(QPixmap(":/icons/pause.png"))
    self.pauseAction = toolBar.addAction(pauseIcon, "Pause")
    self.pauseAction.triggered.connect(self.player.pause)
    playMenu.addAction(self.pauseAction)

    nextIcon = QIcon(QPixmap(":/icons/forward.png"))
    self.nextAction = toolBar.addAction(nextIcon, "Next")
    self.nextAction.triggered.connect(self.playlist.next)
    playMenu.addAction(self.nextAction)

    stopIcon = QIcon(QPixmap(":/icons/stop.png"))
    self.stopAction = toolBar.addAction(stopIcon, "Stop")
    self.stopAction.triggered.connect(self.player.stop)
    playMenu.addAction(self.stopAction)

    # many lines were omitted

执行示例#

通过调用 python main.py 来运行应用程序,以签出新的图标集:

新的多媒体播放器 Qt 示例
posted @   菩提浪子  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航