我尝试在QWidgetAction中插入QMenu,它将用作托盘的上下文菜单。当我这样做的时候,我的菜单里只有一条空行。
我正在使用QT5.5.1。我在等离子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")) -它是正确的显示。所有变量都是我类的成员(如果这有任何意义的话)。
谢谢你的帮助
发布于 2015-12-19 14:54:40
只要您已经显示了菜单,那么问题就在于使用额外的小部件包装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对象,并将父小部件/对象地址传递给构造函数,尽管我们也可以在堆栈上使用这些对象(不是灵活的方法)。
https://stackoverflow.com/questions/34370904
复制相似问题