头文件包含:
#include <QSystemTrayIcon> //托盘类
#include <QDesktopServices> //桌面事件类
#include "QAction"
#include "QMenu"
#include "QCloseEvent"
函数声明和对象定义:
QMenu *trayMenu;//托盘菜单
QSystemTrayIcon *tray;//托盘图标添加成员
QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;
void closeEvent(QCloseEvent *event);
void hideEvent(QHideEvent *event);
初始化:
tray= new QSystemTrayIcon(this);//初始化托盘对象tray
tray->setIcon(QIcon(QPixmap(":/pic.ico").scaled(40, 40)));//设定托盘图标,引号内是自定义的png图片路径
tray->setToolTip("TIPS"); //提示文字
tray->show();//让托盘图标显示在系统托盘上
//托盘图标右键显示菜单
minimizeAction = new QAction("MinWin", this);
maximizeAction = new QAction("MaxWin", this);
restoreAction = new QAction("restore", this);
quitAction = new QAction("exit", this);
trayMenu = new QMenu(this);
trayMenu->addAction(minimizeAction);
trayMenu->addAction(maximizeAction);
trayMenu->addAction(restoreAction);
trayMenu->addSeparator();
trayMenu->addAction(quitAction);
tray->setContextMenu(trayMenu);
connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
函数实现:
void Widget::iconActivated(QSystemTrayIcon::ActivationReason ireason)
{
switch (ireason)
{
case QSystemTrayIcon::Trigger:
this->showNormal();
break;
case QSystemTrayIcon::DoubleClick:
this->showNormal();
break;
case QSystemTrayIcon::MiddleClick:
break;
default:
break;
}
}
//点击右上角关闭按钮,弹出对话框
void Widget::closeEvent(QCloseEvent *event)
{
if(tray->isVisible())
{
QMessageBox MBox;
MBox.setWindowTitle("关闭");
MBox.setText("关闭或最小化到右下角托盘区域?");
MBox.setIconPixmap(QPixmap(":/pic.ico").scaled(100, 100));
QPushButton *btn_close = MBox.addButton("关闭", QMessageBox::AcceptRole);
QPushButton *btn_min = MBox.addButton("最小化", QMessageBox::AcceptRole);
QPushButton *btn_cancle = MBox.addButton("取消", QMessageBox::AcceptRole);
MBox.exec();
if (MBox.clickedButton() == (QAbstractButton*)btn_close)
{
quitAction->trigger();
event->ignore();
}
else if(MBox.clickedButton() == (QAbstractButton*)btn_min)
{
hide();
event->ignore();
}
else if(MBox.clickedButton() == (QAbstractButton*)btn_cancle)
{
event->ignore();
}
}
}
void Widget::hideEvent(QHideEvent *event)
{
if(tray->isVisible())
{
hide(); //隐藏窗口
event->ignore(); //忽略事件
}
}