QMenu中的非互动项目

abo*_*uet 6 c++ qt qmenu

我正在尝试使用一些在QT中不具有交互性的项目来构建菜单.我在MyCustomMenuClass中继承了QMenu.我正在尝试将节标题添加到菜单中,以便用户更清楚.

例如,它应该如下所示:

My section 1 title
Action 1
Action 2
Action 3
My second section title
Action 4
Action 5
Run Code Online (Sandbox Code Playgroud)

问题是部分标题总是对鼠标做出反应,但我希望它们不会对鼠标作出反应,以使其更漂亮.有什么想法怎么做?

ypn*_*nos 10

从QMenu文档:

有四种操作项:分隔符,显示子菜单的操作,窗口小部件和执行操作的操作.使用addSeparator()插入分隔符,使用addMenu()插入子菜单,并将所有其他项视为操作项.

铃响了:小部件!您可以在菜单中添加小部件吗?这意味着你已经安定下来,你可以随心所欲.

你需要的是一个QWidgetAction对象.它允许您将自定义窗口小部件作为操作插入.您的标题将是自定义小部件.如果你只需要一个标题,那就QLabel足够了:

QMenu* myMenu = new QMenu(...);
QLabel* label = new QLabel(tr("<b>Title</b>"), this);
label->setAlignment(Qt::AlignCenter);

QWidgetAction* a = new QWidgetAction(myMenu);
a->setDefaultWidget(label);
Run Code Online (Sandbox Code Playgroud)

- 此代码的来源

有关更复杂的示例代码,请参阅此相关问题:是否有办法在QtCreator中向QMenu添加Widget


Rei*_*ica 5

对于 Qt 5.1 及更高版本,您应该使用addSection(const QString &). 它是专为您想要做的事情而设计的。基于小部件的解决方案看起来会很奇怪,除非您非常小心地匹配字体和间距等。

对于 Qt 4,addAction(const QString &)如果您确实希望使用 Qt 4 编译代码,则应该将其用作后备。我认为这是一个合理的权衡。

对于 Qt 5.0 - 好吧,你根本不应该再使用它,就这么简单:)