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

时间:2018-10-16 15:39:18

标签: python qtstylesheets pyside2

我试图在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*}")

它不会为“系统”按钮着色,而是为所有内容着色,即操作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)}")

该物品的类别已相应更改:

screenshot

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

但什么也没发生...

1 个答案:

答案 0 :(得分:0)

创建自己的课程(继承close()):

.ui-menu .ui-menu-item-wrapper { /* the selector */
    position: relative; /* pre-existing css */
    padding: 3px 1em 3px .4em; /* pre-existing css */
    color: red; /* new css */
    background: yellow; /* new css */
}

然后您编写:

QMenu