将 QMenu 标签设置为粗体而不影响其子项

Roy*_*rau 0 qt qt4 pyside python-2.7

我正在尝试更改 QMenu 上标签/文本的样式和/或字体,而不影响它的子项。我使用 PySide 在 Python 中执行此操作(其工作方式与 Qt 类似)。

我试过了:

menu = QtGui.QMenu()
f = menu.font()
f.setBold(True)
menu.setFont(f)
Run Code Online (Sandbox Code Playgroud)

menu = QtGui.QMenu()
menu.setStyleSheet("QMenu{font-weight: bold;}")
Run Code Online (Sandbox Code Playgroud)

这两者都不会更改菜单本身的标签,但会对其所有子项执行此操作。

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

目标

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

Eze*_*zee 6

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

  • 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());
Run Code Online (Sandbox Code Playgroud)