2014-09-25 46 views
0

我试图更改QMenu上标签/文本的样式和/或字体,而不会影响它的子级。我在Python中使用PySide(它的工作原理与Qt一样)。在不影响子级的情况下制作QMenu标签

我已经试过:

menu = QtGui.QMenu() 
f = menu.font() 
f.setBold(True) 
menu.setFont(f) 

而且

menu = QtGui.QMenu() 
menu.setStyleSheet("QMenu{font-weight: bold;}") 

这些都不会改变菜单本身的标签,但会做所有的孩子。

我宁愿直接在QMenu上设置样式(或者其他类,如果它的行为类似并且可行),而不是在其父类上应用样式表。

目标

的想法是,我有各种各样的子菜单(其中有些动态的基于服务器上的文件夹),其中一些需要大胆地将一些斜体的菜单。因此,我想动态添加这些子QMenu并相应地设置它们。

+1

目前尚不清楚,目前正在很好地为您的样式表代码,但要达到所需的效果没有样式表? – 2014-09-25 08:59:01

+0

之后你用'menu'对象做什么? menu.exec还是什么?你把它放在哪里?你想在哪里看到粗体文字? – Ezee 2014-09-25 09:29:53

+0

@ N1ghtLight:如前所述,使用setStyleSheet结果与调整字体的结果相同。两者都不是我想要的。 – 2014-09-25 09:34:25

回答

4

您可以轻松实现。要理解其中的逻辑:

  • QMenu - 是当你添加QMenu另一个QMenuQMenu::menuAction被放置在一个基地菜单,显示项目
  • 一个小部件。
  • 如果您想要自定义子菜单添加到基本菜单时的外观,您需要自定义menuAction

因此,要让菜单粗体,只需将粗体字体设置为menuAction即可。

下面是一个简单的工作示例:

QMenu m; //base menu 
QMenu sub; //sub menu 
sub.setTitle("subMenu"); 

QAction* a1 = new QAction("act1", &m); 
QAction* a2 = new QAction("act2", &m); 
QAction* a3 = new QAction("act3", &m); 

// set a bold font for a sub menu item 
QFont f = sub.menuAction()->font(); 
f.setBold(true);  
sub.menuAction()->setFont(f); 

// add an action to the sub menu 
sub.addAction(a3); 

// add two actions and the sub menu to the base menu 
m.addAction(a1); 
m.addMenu(&sub); 
m.addAction(a2); 

// show the base menu 
m.exec(QCursor::pos()); 
+0

谢谢。这工作完美。 – 2014-09-25 10:24:05

+0

不客气。 – Ezee 2014-09-25 10:25:11

0

阅读关于QSS selectors的Qt文档。

对于您的情况:您无法直接自定义特定菜单项的标签。但是你可以插入QWidgetAction insend QAction并根据需要自定义它(在QWidgetAction上放置一个标签并对其进行自定义)。

+0

QWidgetAction是否可以像普通“子菜单'持有孩子QMenuItem和QMenu? – 2014-09-25 09:39:44

+1

是的,一切都取决于你如何自定义内部小部件。 – 2014-09-25 09:58:37

+1

您不会得到确切的行为,但您可以花费大量精力接近它。 – Ezee 2014-09-25 10:04:23

相关问题