1、創(chuàng)建一個Qt應(yīng)用程序,并添加Qt Widgets模塊。
2、在Qt應(yīng)用程序得主窗口中創(chuàng)建一個QSystemTrayIcon對象:
QSystemTrayIcon* trayIcon = new QSystemTrayIcon(this);
3、設(shè)置系統(tǒng)托盤圖標(biāo):
QIcon icon(":/icon.png");trayIcon->setIcon(icon);
4、一個QMenu對象,并將其添加到系統(tǒng)托盤圖標(biāo)中:
QMenu* trayMenu = new QMenu(this);QAction* quitAction = new QAction(tr("&Quit"), this);connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);trayMenu->addAction(quitAction);trayIcon->setContextMenu(trayMenu);
創(chuàng)建QMenu對象,并添加了QAction對象(退出操作)。使用connect()函數(shù)將QAction對象得觸發(fā)事件(triggered)連接到QApplication得退出事件。
5、在退出應(yīng)用程序時隱藏系統(tǒng)托盤圖標(biāo):
void MainWindow::closeEvent(QCloseEvent* event){ if(trayIcon->isVisible()) { hide(); event->ignore(); }}
在這個例子中,我們重寫了closeEvent()函數(shù),并在關(guān)閉事件中判斷系統(tǒng)托盤圖標(biāo)是否可見。如果可見,則隱藏主窗口并忽略關(guān)閉事件。
6、顯示系統(tǒng)托盤圖標(biāo):
trayIcon->show();
以下是代碼示例:
#include <QApplication>#include <QMainWindow>#include <QSystemTrayIcon>#include <QMenu>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QSystemTrayIcon* trayIcon = new QSystemTrayIcon(this); QIcon icon(":/icon.png"); trayIcon->setIcon(icon); QMenu* trayMenu = new QMenu(this); QAction* quitAction = new QAction(tr("&Quit"), this); connect(quitAction, &QAction::triggered, qApp, &QApplication::quit); trayMenu->addAction(quitAction); trayIcon->setContextMenu(trayMenu); trayIcon->show(); }protected: void closeEvent(QCloseEvent* event) override { QSystemTrayIcon* trayIcon = qobject_cast<QSystemTrayIcon*>(sender()); if(trayIcon && trayIcon->isVisible()) { hide(); event->ignore(); } else { QMainWindow::closeEvent(event); } }};