QWidgetAction 在 QMenu 中不能作为托盘的上下文菜单工作



我正试图在QMenu中插入一个QWidgetAction,它将用作托盘的上下文菜单。当我这样做的时候,我的菜单里只有一行空行。

我正在使用:

  • 问题5.5.1
  • Plasma 5桌面环境(Linux)

这是我的代码:

action = new QWidgetAction(0);
testw = new QWidget();
testl = new QLabel(QString("Test"), testw);
action->setDefaultWidget(testw);
menu.addAction(action);
trayIcon.setContextMenu(&menu);

如果我使用menu.addAction(QString("Test"));它被正确地显示。

所有的变量都是我类的成员。

只要您已经显示了菜单,那么问题就出在包装QLabel的额外小部件上。这是QWdigetAction通常的工作方式:

QWidgetAction* pWidgetAction = new QWidgetAction(0); // no parent-owner?
QLabel* pLabelWidget = new QLabel("Test");           // label widget
pWidgetAction->setDefaultWidget(pLabelWidget);       // label is a widget
menu.addAction(pWidgetAction);                       // add widget action
trayIcon.setContextMenu(&menu);                      // this I assume works

也不确定这些对象的生命周期(所有权),以及为什么menutrayIcon不是指针,但你应该更清楚这一点。默认情况下,我总是用new创建UI对象,并将父窗口小部件/对象地址传递给构造函数,尽管我们也可以在堆栈中使用这些(不是灵活的方法)。

相关内容

  • 没有找到相关文章

最新更新