Anwendung in SystemTray minimieren



  • Hallo

    ich möchte meine laufende QT-Anwendung in Windows 7 / 8 auf dem Desktop rechts unten in diese kleine Taskleiste reinstecken. Wo auch der Sound und die USB-Events sind.

    Dann möchte ich dieses Icon mit einem Popupmenü versehen und somit dem Benutzer die Möglichkeit geben, das Fenster sichtbar zu machen.

    Weiß jemand was ich meine? 🙂 Ich habe leider vergessen, wie das Ding rechts unten heißt, sonst wäre ich beim Googeln wohl erfolgreicher gewesen... 😉

    Wenn ja, wie kann man das in QT umsetzen?

    gruß Tobi



  • QSystemTrayIcon.



  • Danke dir. Das war der richtige Hinweis.
    Ich bin noch einen Schritt weiter gegangen.

    Wenn man die Anwendung minimiert, erscheint das TrayIcon und die Anwendung wird nicht als offene Anwendung in der normalen Taskbar angezeigt.

    Öffnet man sie dann über das TrayIcon wieder, erscheint die Anwendung in der Taskbar und das Fenster öffnet sich.

    Hier der funktionierende Quellcode.

    Konstruktor mit "showMinimized"

    MainWindow::MainWindow() :
        QMainWindow()
    {
        createTrayIcon();
        showMinimized();
    }
    

    Bestimmte Events muessen abgefangen werden, damit die Taskleiste nicht befüllt wird:

    bool MainWindow::event( QEvent *event )
    {
        if ( event->type() == QEvent::WindowStateChange )
        {
            if ( isMinimized() )
            {
                if ( trayIcon )
                {
                    trayIcon->show();
                    hide();
                    event->ignore();
                    return true;
                }
    
            }
            else
            {
                trayIcon->hide();
                event->accept();
            }
        }
        return QMainWindow::event( event );
    }
    

    Desweiteren: in main.cpp sollte das "show" gar nicht erst aufgerufen werden, um den gewünschten Effekt zu erzielen.


Log in to reply