行业介绍
CentOS下使用Qt实现系统托盘
2023-02-25 16:16  浏览:219

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); } }};