将QMenu标签加粗而不影响其子项

时间:2014-09-25 08:48:14

标签: qt python-2.7 qt4 pyside

我正在尝试更改QMenu上标签/文字的样式和/或字体,而不会影响它的孩子。我在Python中使用PySide(它就像Qt一样工作)。

我试过了:

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

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

这两个都不会改变菜单本身的标签,但会在所有孩子身上做到。

我更喜欢直接在QMenu(或其他类,如果它的行为类似并使其成为可能)上设置样式,而不是在其父级上应用样式表。

目标

我的想法是我有一个菜单,里面有各种子菜单(基于服务器上的文件夹有点动态),其中一些需要是Bold和一些Italic。因此,我想动态添加这些子QMenu并相应地设置它们。

2 个答案:

答案 0 :(得分:4)

你可以轻松实现。要理解逻辑:

  • QMenu - 是一个显示项目的小部件
  • 当您将QMenu添加到另一个QMenu QMenu::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());

答案 1 :(得分:0)

阅读有关QSS selectors

的Qt文档

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