【Qt開發】實現系統托盤,托盤選單,托盤訊息

蝸牛201發表於2019-03-26

概述

系統托盤就是在系統桌面底部特定的區域顯示執行的程式。windows在工作列狀態區域,linux在布告欄區域。應用程式系統托盤功能,是比較普遍的功能,本篇將詳細的介紹如何實現該功能。

 演示Demo實現功能:

1.應用啟動後,工作列,系統托盤可以看到該程式。

2.點選右上角×關閉視窗,自動隱藏視窗,托盤可以看到該程式。

3.滑鼠在托盤圖示上右鍵,彈出"退出程式"選單欄,並帶有圖示。

步驟:

1.工程中新建TrayDialog類,基類是QDialog,在介面上新增Text Browser控制元件和提示資訊。

 

2.在TrayDialog.h標頭檔案中新增#include <QtWidgets>包含檔案

3.新增成員變數

    QSystemTrayIcon m_systray,

  訊號槽響應函式

    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);

    int OnExit();

  重寫closeEvent(QCloseEvent *event)函式,完整程式碼如下:

#pragma once
#pragma execution_character_set("utf-8")

#include <QDialog>
#include <QtWidgets>
#include "ui_TrayDialog.h"

class TrayDialog : public QDialog
{
    Q_OBJECT

public:
    TrayDialog(QWidget *parent = Q_NULLPTR);
    ~TrayDialog();

private:
    void closeEvent(QCloseEvent *event);

private slots:
    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);
    int OnExit();

private:
    Ui::TrayDialog ui;
    QSystemTrayIcon m_systray;
};

4.在Qt Designer中新增Action,用於托盤右鍵退出程式。

 

5.建構函式TrayDialog(QWidget *parent)中新增如下程式碼:

    //設定提示文字
    m_systray.setToolTip("系統托盤演示程式");

    // 設定托盤圖示
    m_systray.setIcon(QIcon(":/qtlearn/Resources/EXE.ico"));


    //托盤選單項
    QMenu * menu = new QMenu();
    menu->addAction(ui.actionExit);
    m_systray.setContextMenu(menu);

    // 關聯托盤事件
    connect(&m_systray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
        this, SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));

    //顯示托盤
    m_systray.show();

    //托盤選單響應
    connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(OnExit()));

 

6.關閉視窗事件響應函式

/************************************
@ Brief:        點選關閉視窗
@ Author:        woniu201 
@ Created:        2019/03/21
@ Return:            
************************************/
void TrayDialog::closeEvent(QCloseEvent *event)
{
    this->hide();
    event->ignore();
}

 

7.雙擊/單擊托盤應用程式響應函式

/************************************
@ Brief:        雙擊/單擊托盤事件
@ Author:        woniu201
@ Created:        2019/03/21
@ Return:
************************************/
int TrayDialog::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason)
{
    if (reason == QSystemTrayIcon::Trigger
        || reason == QSystemTrayIcon::DoubleClick)
    {
        // 顯示主視窗
        this->showNormal();
    }
    return 0;
}

8.托盤右鍵退出響應函式

/************************************
@ Brief:        托盤選單退出
@ Author:        woniu201 
@ Created:        2019/03/21
@ Return:            
************************************/
int TrayDialog::OnExit()
{
    QApplication::exit(0);
    return 0;
}

 9.啟動後效果如下

 

 

 

相關文章