Qt如何给程序添加系统托盘

介绍一下如何给Qt程序做一个系统托盘

简单介绍

image20241119194056367

开始制作

添加托盘

使用到了QSystemTrayIcon类,首先要在.h的private中创建一个:

1
QSystemTrayIcon *m_sysTrayIcon; //系统托盘

然后在cpp中实现

1
2
3
m_sysTrayIcon = new QSystemTrayIcon(this); //新建QSystemTrayIcon对象
QIcon icon = QIcon(":/img/img/logo.png"); //资源文件添加的图标
m_sysTrayIcon->setIcon(icon);

这里设置图标要检查一下,如果设置失败的话不会报错,也不会显示托盘

接着,就可以给托盘图标添加事件了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
connect(m_sysTrayIcon, &QSystemTrayIcon::activated, //给QSystemTrayIcon添加槽函数
[=](QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger: //单击托盘图标
//单击事件
break;
case QSystemTrayIcon::DoubleClick: //双击托盘图标
//双击事件
break;
default:
break;
}
});

添加托盘菜单

也就是右击托盘图标会显示的菜单,使用到了QMenu,先.h中创建:

1
QMenu *m_menu; //菜单

然后再cpp中实现

1
2
m_menu = new QMenu(this);
m_sysTrayIcon->setContextMenu(m_menu); //把QMenu赋给QSystemTrayIcon对象

添加菜单项

我们有了菜单,但是菜单里没东西是不行的,使用QAction来添加动作,这里做一个显示主界面和退出程序的示例。

还是一样.h中添加:

1
2
QAction *m_showMainAction; //显示主界面
QAction *m_exitAppAction; //退出程序

然后在上面的QMenu赋值到Icon前,加入

1
2
3
4
m_showMainAction = new QAction("主界面", this);
m_exitAppAction = new QAction("退出", this);
m_menu->addAction(m_showMainAction); //新增菜单项---显示主界面
m_menu->addAction(m_exitAppAction); //新增菜单项---退出程序

当然我们有了按钮还不行,还要给按钮添加事件

private slots中添加:

1
2
void on_showMainAction(); //打开主界面
void on_exitAppAction(); //退出程序

记得实现

1
2
3
4
5
6
7
8
9
10
//托盘主界面
void MainWindow::on_showMainAction()
{
this->show();
}
//托盘推出
void MainWindow::on_exitAppAction()
{
qApp->exit();
}

当然,还要连接一下信号和槽

1
2
connect(m_showMainAction,SIGNAL(triggered()),this,SLOT(on_showMainAction()));
connect(m_exitAppAction,SIGNAL(triggered()),this,SLOT(on_exitAppAction()));

Qt如何给程序添加系统托盘
https://zao-chen.github.io/2024/11/19/Qt如何给程序添加系统托盘/
作者
Zao_chen
发布于
2024年11月19日
许可协议