QT 系统托盘练习
一、简述
QT 系统托盘练习,在系统托盘上添加右键菜单
二、效果
三、工程结构
四、源代码
TextTray.pro文件
QT += widgets gui HEADERS += \ mymainwindow.h SOURCES += \ mymainwindow.cpp \ main.cpp
mymainwindow.h文件
#ifndef MYMAINWINDOW_H #define MYMAINWINDOW_H #include <QMenu> #include <QMainWindow> #include <QMouseEvent> #include <QSystemTrayIcon> class MyMainWindow : public QMainWindow { Q_OBJECT public: explicit MyMainWindow(QWidget *parent = 0); public slots: void TrayClick(QSystemTrayIcon::ActivationReason);//托盘点击事件 protected: void mousePressEvent(QMouseEvent *e);//重写鼠标按下事件 private: QSystemTrayIcon* _tray;//系统托盘 QMenu* _menu;//菜单 }; #endif // MYMAINWINDOW_H
mymainwindow.cpp文件
#include "mymainwindow.h" MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent) { _tray = new QSystemTrayIcon(this);//创建一个系统托盘 // _tray->setIcon(QIcon("../text.ico"));//设置图标 _tray->setToolTip("This is a test");//鼠标移到上面时的文本提示 _menu = new QMenu(this);//创建菜单 QAction* exitAction = new QAction("&退出",this);//创建退出动作 _menu->addAction(exitAction);//将退出动作添加到菜单 _tray->setContextMenu(_menu);//设置系统托盘的菜单 _tray->show();//将系统托盘show出来 //点击系统托盘图标触发事件 connect(_tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, SLOT(TrayClick(QSystemTrayIcon::ActivationReason))); //点击菜单上的“退出”,触发事件 connect(exitAction,SIGNAL(triggered()),this,SLOT(close())); } void MyMainWindow::TrayClick(QSystemTrayIcon::ActivationReason reason) { if(reason == QSystemTrayIcon::Trigger)//点击系统托盘图标 { if(this->isHidden())//如果是隐藏时点击则显示 { this->show(); } else//如果是显示时点击则隐藏 { this->hide(); } } } void MyMainWindow::mousePressEvent(QMouseEvent *e) { if(e->button() == Qt::RightButton)//按下鼠标右键 { _menu->exec(QCursor::pos());//在光标位置show出菜单 } }
main.cpp文件
#include <QApplication> #include "mymainwindow.h" int main(int argc,char* argv[]) { QApplication app(argc,argv); MyMainWindow w; w.setWindowTitle("测试系统托盘");//程序标题 w.show();//show出窗体 return app.exec(); }