【Qt開發】實現系統托盤,托盤菜單,托盤消息

概述

系統托盤就是在系統桌面底部特定的區域顯示運行的程序。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.啓動後效果如下

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章