2015-12-19 40 views
1

我嘗試在QMenu中插入QWidgetAction,QMenu將用作托盤的上下文菜單。當我這樣做時,我的菜單中只有一條空行。QWidgetAction在QMenu中不起作用托盤的上下文菜單

我正在使用Qt 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")) - 這是正確顯示。 所有變量都是我的類的成員(如果這可能有任何意義)。

感謝所有幫助

+1

我不認爲這可能有效。系統托盤圖標菜單不由應用程序管理;菜單的「描述」通過DBus序列化。因此,您不能在其中嵌入小部件。 – peppe

+0

我試過了@AlexanderVX和類似方法的解決方案,但是(像@佩佩說的),這在我的系統托盤中不起作用(我運行的是Lubuntu 14.04)。然而,我使用的解決方法 - 因爲在我的情況下,我只需要顯示文本 - 就是調用我想用作標籤的'QAction'的'setDisabled'方法 – sunyata

回答

1

只要你已經顯示的菜單那麼問題是額外的插件您纏繞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對象,並將父窗口小部件/對象地址傳遞給構造函數,儘管我們也可以將它們放在棧上(而不是靈活的方法)。

相關問題