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);
}