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