QWidgetAction in QSystemTrayIconMenu nicht sichtbar

Alles rund um die Programmierung mit Qt
Antworten
QtGuy
Beiträge: 8
Registriert: 21. Februar 2012 13:53

QWidgetAction in QSystemTrayIconMenu nicht sichtbar

Beitrag von QtGuy »

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:

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;
};
Und hier füge ich die Aktion einem normalen Menü hinzu (funktioniert):

Code: Alles auswählen

    timerAction = new TimerAction(tr("Action Title"));
    ui->menuVorgang->addAction(timerAction);
Der Versuch, die Aktion ins TrayIcon-Menu zu setzen scheitert und der Menüeintrag bleibt unsichtbar:

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);
}
Das Tray-Icon wird korrekt erzeugt und alle Menüeinträge sind sichtbar, ausser eben meine QWidgetAction "timerAction". Ich bin echt ratlos...
Antworten