如何格式化 Qmenu 或 Toolboxes 中的特定项目?是不是可以定义伪状态或子控件?

Posted

技术标签:

【中文标题】如何格式化 Qmenu 或 Toolboxes 中的特定项目?是不是可以定义伪状态或子控件?【英文标题】:How to format specific items in Qmenu or Toolboxes? Is it possible to define a pseudo-state or sub-control?如何格式化 Qmenu 或 Toolboxes 中的特定项目?是否可以定义伪状态或子控件? 【发布时间】:2018-10-16 15:39:18 【问题描述】:

我试图在 BUTTON 上为工具栏中的一个选项设置StyleSheet,即 menuBar 中的“menuSystem”对象:

结构如下:

NAME               Class
menuBar            QMenu
    -menuFile      QMenu
    -menuSystem    QMenu    <- Want to color just the button for this
        -action1   QAction
        -action2   QAction
        -action3   QAction
    -menuView      QMenu

如果我使用:

ui.menuBar.setStyleSheet("QMenu::item background-color: rgb(80, 255, 80)"

它为所有按钮着色(显然)

如果我使用:

ui.menuSystem.setStyleSheet("*same styling*")

它不会为“系统”按钮着色,而是为所有内容着色,即操作 1、2 和 3。

另一方面,如果我使用像 :selected 这样的伪状态:

ui.menuSystem.setStyleSheet("QMenu::item:selected *same styling*"

它只为我的光标所在的按钮着色,包括“menuSystem”

这让我想,有没有办法使用函数来定义伪状态来捕获信号并应用它?

编辑:我尝试按照@Matphy 的建议定义一个类:

class MSystem(QMenu) :
    pass

在解决方案中的 msystem.h 中,并且:

import msystem
...
self.parent.ui.menuBar.setStyleSheet("MSystem::item background-color: rgb(255, 80, 80)")

项目的类别已相应更改:

或在 .ui 文件中:

<widget class="MSystem" name="MenuSystem">
    <property name="title">
        <string>&amp;System</string>
    </property>
    <widget class="QMenu" name="menuSoftware">*stuff*</wdiget>
    *and more stuff*
</widget>

在底部:

<customwidgets>
    <customwidget>
        <class>MSystem</class>
        <extends>QMenu</extends>
        <header>msystem.h</header>
    </customwidget>
</customwidgets>

但是什么也没发生……

【问题讨论】:

@eyllanesc,非常感谢您在格式化方面的帮助! 请提供minimal reproducible example 【参考方案1】:

创建你自己的类(继承QMenu):

class MenuSystem(QMenu):
     pass

然后你写:

ui.menuBar.setStyleSheet("MenuSystem::item background-color: rgb(80, 255, 80)")

【讨论】:

非常感谢您的回答@Matphy!我现在肯定会试试这个。一个问题是我必须为我的所有菜单和操作执行此操作。这很多,因为除了这里提到的之外,我还有其他菜单。在这种情况下,您还有其他可以想象的方法吗?再次感谢您! hmm...它没有做任何奇怪的事情,它至少应该给我一个错误。

以上是关于如何格式化 Qmenu 或 Toolboxes 中的特定项目?是不是可以定义伪状态或子控件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyqt Qmenu中获取所选项目

在 Matplotlib 画布上正确放置 Qmenu

如何知道触发了哪个 QMenu 的动作

Qt 中如何隐藏 QMenu

如何将 QMenu 中的 QAction 转换为 QWidget?

如何在 Qmenu 中添加关闭按钮?