實現思路
- 建立主應用程式:使用
QApplication
作為應用程式的基礎。
- 建立系統托盤圖示:使用
QSystemTrayIcon
來顯示圖示在系統托盤中。
- 新增右鍵選單:為托盤圖示新增右鍵選單,允許使用者選擇退出應用程式。
- 顯示新訊息:使用
QTimer
定期觸發顯示訊息,模擬新訊息到達的情況。
- 處理槽函式:定義槽函式來響應特定事件,例如定時器超時時顯示托盤訊息。
1.包含必要的標頭檔案:
#include <QApplication>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QWidget>
#include <QTimer>
#include <QIcon>
#include <QMessageBox>
#include <QDebug>
2.定義托盤應用程式類:
- 建立一個名為
TrayApp
的類,繼承自 QWidget
。
- 在建構函式中,初始化系統托盤圖示、選單和定時器。
class TrayApp : public QWidget {
public:
TrayApp() {
trayIcon = new QSystemTrayIcon(QIcon(":/Image/QQ圖示.png"), this);
// 建立選單
QMenu *menu = new QMenu();
QAction *exitAction = menu->addAction("Exit");
connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);
trayIcon->setContextMenu(menu);
trayIcon->show();
3.設定定時器:
- 使用
QTimer
來定時觸發訊息顯示。
- 連線定時器的超時訊號到槽函式。
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &TrayApp::simulateNewMessage);
timer->start(3000); // 每3秒傳送一次訊息
}
4.定義槽函式:
- 在私有槽中定義
simulateNewMessage
函式,該函式用於顯示系統托盤訊息。
private slots:
void simulateNewMessage() {
trayIcon->showMessage("新訊息", "您有一條新訊息!", QSystemTrayIcon::Information);
}
5.在 main
函式中建立應用程式例項:
- 建立
QApplication
物件並設定退出行為。
- 建立
TrayApp
的例項,啟動事件迴圈。
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);
TrayApp trayApp; // 建立托盤應用例項
return app.exec();
}
完整程式碼
#include <QApplication>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QWidget>
#include <QTimer>
#include <QIcon>
#include <QMessageBox>
#include <QDebug>
class TrayApp : public QWidget {
public:
TrayApp() {
trayIcon = new QSystemTrayIcon(QIcon(":/Image/QQ圖示.png"), this);
// 建立選單
QMenu *menu = new QMenu();
QAction *exitAction = menu->addAction("Exit");
connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);
trayIcon->setContextMenu(menu);
// 顯示托盤圖示
trayIcon->show();
// 定時器,模擬新訊息
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &TrayApp::simulateNewMessage);
timer->start(3000); // 每3秒傳送一次訊息
}
private slots:
void simulateNewMessage() {
trayIcon->showMessage("新訊息", "您有一條新訊息!", QSystemTrayIcon::Information);
}
private:
QSystemTrayIcon *trayIcon; // 使用指標型別以動態建立
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);
TrayApp trayApp; // 建立托盤應用例項
return app.exec();
}
總結
- 這個程式碼實現了一個簡單的系統托盤應用,能在托盤中顯示圖示,並定期顯示訊息。
- 使用者可以透過右鍵選單退出應用程式。
- 透過使用 Qt 的訊號和槽機制,程式碼結構清晰、易於維護與擴充套件。