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

开始制作
添加托盘
使用到了QSystemTrayIcon类,首先要在.h的private中创建一个:
1
| QSystemTrayIcon *m_sysTrayIcon;
|
然后在cpp中实现
1 2 3
| m_sysTrayIcon = new QSystemTrayIcon(this); 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::ActivationReason reason) { switch(reason) { case QSystemTrayIcon::Trigger: break; case QSystemTrayIcon::DoubleClick: break; default: break; } });
|
添加托盘菜单
也就是右击托盘图标会显示的菜单,使用到了QMenu,先.h中创建:
然后再cpp中实现
1 2
| m_menu = new QMenu(this); m_sysTrayIcon->setContextMenu(m_menu);
|
添加菜单项
我们有了菜单,但是菜单里没东西是不行的,使用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()));
|