Qt:实现系统托盘,托盘菜单,托盘消息

系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。

演示Demo实现功能:

1.应用启动后,任务栏,系统托盘可以看到该程序。

2.点击右上角×关闭窗口,自动隐藏窗口,托盘可以看到该程序。

3.鼠标在托盘图标上右键,弹出"退出程序"菜单栏,并带有图标。

步骤:
1.工程中新建TrayDialog类,基类是QDialog,在界面上添加Text Browser控件和提示信息。

2.在TrayDialog.h头文件中添加#include 包含文件

3.添加成员变量

    QSystemTrayIcon m_systray,

  信号槽响应函数

    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);

    int OnExit();

  重写closeEvent(QCloseEvent *event)函数,完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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.关闭窗口事件响应函数

1
2
3
4
5
6
7
8
9
10
11
/************************************
@ Brief: 点击关闭窗口
@ Author: woniu201
@ Created: 2019/03/21
@ Return:
************************************/
void TrayDialog::closeEvent(QCloseEvent *event)
{
this->hide();
event->ignore();
}

7.双击/单击托盘应用程序响应函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/************************************
@ 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.托盘右键退出响应函数

1
2
3
4
5
6
7
8
9
10
11
/************************************
@ Brief: 托盘菜单退出
@ Author: woniu201
@ Created: 2019/03/21
@ Return:
************************************/
int TrayDialog::OnExit()
{
QApplication::exit(0);
return 0;
}

9.启动后效果如下

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×