QT 如何设置程序关闭后显示在系统托盘区
时间: 2024-03-28 17:39:47 浏览: 204
要实现程序关闭后显示在系统托盘区,需要使用 Qt 的 QSystemTrayIcon 类。具体实现步骤如下:
1. 在程序初始化时创建 QSystemTrayIcon 对象,并设置其图标、提示信息等属性;
2. 重写程序的 closeEvent() 函数,在程序关闭前将其隐藏,并在系统托盘区显示 QSystemTrayIcon 对象;
3. 在 QSystemTrayIcon 对象的 activated() 信号中,处理双击托盘图标显示程序主窗口的事件。
示例代码如下:
```cpp
#include <QSystemTrayIcon>
#include <QMenu>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
// 创建系统托盘图标
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(QIcon(":/images/icon.png"));
trayIcon->setToolTip(tr("My Application"));
// 创建托盘菜单
trayMenu = new QMenu(this);
QAction *showAction = new QAction(tr("Show"), this);
QAction *quitAction = new QAction(tr("Quit"), this);
connect(showAction, &QAction::triggered, this, &MainWindow::showNormal);
connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
trayMenu->addAction(showAction);
trayMenu->addAction(quitAction);
trayIcon->setContextMenu(trayMenu);
// 监听系统托盘图标的激活事件
connect(trayIcon, &QSystemTrayIcon::activated, this, &MainWindow::trayIconActivated);
}
protected:
void closeEvent(QCloseEvent *event) override
{
if (trayIcon->isVisible())
{
hide();
event->ignore();
}
else
{
event->accept();
}
}
private slots:
void trayIconActivated(QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::DoubleClick)
{
showNormal();
}
}
private:
QSystemTrayIcon *trayIcon;
QMenu *trayMenu;
};
```
在程序退出时,需要手动删除 QSystemTrayIcon 对象,代码如下:
```cpp
delete trayIcon;
```
阅读全文