QWidgetAction in QSystemTrayIconMenu nicht sichtbar
Verfasst: 4. Mai 2012 18:55
Hallo,
ich habe folgendes Problem: Ich möchte unter Mac OS X mit Qt 4.8 ein benutzerdefiniertes Widget als Menüeintrag in das System-Tray Kontextmenü einbinden.
Ich habe also eine eigene Klasse von QWidgetAction abgeleitet, die eine QSpinBox in einem Widget erzeugt.
Diese QWidgetAction kann ich ohne Weiteres einem beliebigen Menü zuordnen (mit addAction) und die Spinbox erscheint dann auch wie gewünscht als Menüeintrag.
Füge ich diese QWidgetAction aber dem TrayIconMenu hinzu, sehe ich zwar, dass ein neuer Eintrag erzeugt wird, aber dieser bleibt einfach leer. Andere Aktionen lassen sich aber problemlos diesem TrayIconMenu hinzufügen und werden auch angezeigt.
Hat jemand eine Idee, woran das liegen kann?
Hier die QWidgetAction-Klasse:
Und hier füge ich die Aktion einem normalen Menü hinzu (funktioniert):
Der Versuch, die Aktion ins TrayIcon-Menu zu setzen scheitert und der Menüeintrag bleibt unsichtbar:
Das Tray-Icon wird korrekt erzeugt und alle Menüeinträge sind sichtbar, ausser eben meine QWidgetAction "timerAction". Ich bin echt ratlos...
ich habe folgendes Problem: Ich möchte unter Mac OS X mit Qt 4.8 ein benutzerdefiniertes Widget als Menüeintrag in das System-Tray Kontextmenü einbinden.
Ich habe also eine eigene Klasse von QWidgetAction abgeleitet, die eine QSpinBox in einem Widget erzeugt.
Diese QWidgetAction kann ich ohne Weiteres einem beliebigen Menü zuordnen (mit addAction) und die Spinbox erscheint dann auch wie gewünscht als Menüeintrag.
Füge ich diese QWidgetAction aber dem TrayIconMenu hinzu, sehe ich zwar, dass ein neuer Eintrag erzeugt wird, aber dieser bleibt einfach leer. Andere Aktionen lassen sich aber problemlos diesem TrayIconMenu hinzufügen und werden auch angezeigt.
Hat jemand eine Idee, woran das liegen kann?
Hier die QWidgetAction-Klasse:
Code: Alles auswählen
class TimerAction : public QWidgetAction {
public:
TimerAction (const QString& title) :
QWidgetAction (NULL) {
QWidget* pWidget = new QWidget (NULL);
QHBoxLayout* pLayout = new QHBoxLayout();
QLabel *pLabel = new QLabel (title);
pLayout->addWidget (pLabel);
pSpinBox = new QSpinBox(NULL);
pLayout->addWidget (pSpinBox);
pWidget->setLayout (pLayout);
setDefaultWidget(pWidget);
}
QSpinBox * spinBox () {
return pSpinBox;
}
private:
QSpinBox * pSpinBox;
};Code: Alles auswählen
timerAction = new TimerAction(tr("Action Title"));
ui->menuVorgang->addAction(timerAction);Code: Alles auswählen
void MainWindow::createTrayIcon() // Setup Tray-Icon and Tray-Menu
{
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(maximizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(ui->actionNeu_kontieren);
trayIconMenu->addAction(ui->actionNeuer_Zaehler);
trayIconMenu->addSeparator();
trayIconMenu->addAction(timerAction);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
}