如何格式化 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>&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 中的特定项目?是不是可以定义伪状态或子控件?的主要内容,如果未能解决你的问题,请参考以下文章