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

How to format specific items in Qmenu or Toolboxes? Is it possible to define a pseudo-state or sub-control?

我正在尝试为工具栏中的一个选项设置 BUTTON 上的 setStyleSheet,即 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*}")

它不会为 'system' 按钮着色,但会为所有内容着色,即操作 1、2 和 3。

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

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

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

这让我想到,有没有一种方法可以使用函数来定义伪状态来捕获信号并应用它?

编辑:我尝试按照@Matphy 的建议定义 class:

class MSystem(QMenu) :
    pass

in msystem.h 是在解中,并且:

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

项目的class已相应更改:

或在 .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>

但什么也没发生...

创建您自己的class(继承QMenu):

class MenuSystem(QMenu):
     pass

然后你写:

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