我正在尝试更改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并相应地设置它们。
答案 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}}上放置标签并对其进行自定义)。