1、创建一个Qt应用程序,并添加Qt Widgets模块。
2、在Qt应用程序得主窗口中创建一个QSystemTrayIcon对象:
QSystemTrayIcon* trayIcon = new QSystemTrayIcon(this);
3、设置系统托盘图标:
QIcon icon(":/icon.png");trayIcon->setIcon(icon);
4、一个QMenu对象,并将其添加到系统托盘图标中:
QMenu* trayMenu = new QMenu(this);QAction* quitAction = new QAction(tr("&Quit"), this);connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);trayMenu->addAction(quitAction);trayIcon->setContextMenu(trayMenu);
创建QMenu对象,并添加了QAction对象(退出操作)。使用connect()函数将QAction对象得触发事件(triggered)连接到QApplication得退出事件。
5、在退出应用程序时隐藏系统托盘图标:
void MainWindow::closeEvent(QCloseEvent* event){ if(trayIcon->isVisible()) { hide(); event->ignore(); }}
在这个例子中,我们重写了closeEvent()函数,并在关闭事件中判断系统托盘图标是否可见。如果可见,则隐藏主窗口并忽略关闭事件。
6、显示系统托盘图标:
trayIcon->show();
以下是代码示例:
#include <QApplication>#include <QMainWindow>#include <QSystemTrayIcon>#include <QMenu>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QSystemTrayIcon* trayIcon = new QSystemTrayIcon(this); QIcon icon(":/icon.png"); trayIcon->setIcon(icon); QMenu* trayMenu = new QMenu(this); QAction* quitAction = new QAction(tr("&Quit"), this); connect(quitAction, &QAction::triggered, qApp, &QApplication::quit); trayMenu->addAction(quitAction); trayIcon->setContextMenu(trayMenu); trayIcon->show(); }protected: void closeEvent(QCloseEvent* event) override { QSystemTrayIcon* trayIcon = qobject_cast<QSystemTrayIcon*>(sender()); if(trayIcon && trayIcon->isVisible()) { hide(); event->ignore(); } else { QMainWindow::closeEvent(event); } }};