頭文件:
#ifndef SYSTEMTRAYICON_H
#define SYSTEMTRAYICON_H
#include <QWidget>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>
class SystemTrayIcon : public QWidget
{
Q_OBJECT
public:
explicit SystemTrayIcon(QStringList strList, QIcon icon, QWidget *parent = 0);
~SystemTrayIcon();
void createAct();
void createTrayMenu();
void createTrayIcon();
public slots:
void slot_iconActivated(QSystemTrayIcon::ActivationReason reason);
public:
QAction *actFixed; //固定位置
private:
QSystemTrayIcon *m_trayIcon; //系統托盤
QMenu *menu; //菜單
QAction *actMin; //最小化
QAction *actNormal; //正常
QAction *actExit; //退出
QStringList m_strList; //托盤信息
QIcon m_icon; //托盤圖標
QWidget *pWidget; //父對象
};
#endif // SYSTEMTRAYICON_H
源文件:
#include "systemtrayicon.h"
#include <QApplication>
#include <QDebug>
SystemTrayIcon::SystemTrayIcon(QStringList strList, QIcon icon, QWidget *parent)
: QWidget(parent)
{
pWidget = parent;
m_strList = strList;
m_icon = icon;
createAct();
createTrayMenu();
createTrayIcon();
}
SystemTrayIcon::~SystemTrayIcon()
{
}
void SystemTrayIcon::createAct()
{
actFixed = new QAction("鎖定位置(&F)",this);
actFixed->setCheckable(true);
actFixed->setChecked(true);
actMin = new QAction("最小化(&N)",this);
connect(actMin,SIGNAL(triggered()),pWidget,SLOT(hide()));
actNormal = new QAction("還 原(&R)",this);
connect(actNormal,SIGNAL(triggered()),pWidget,SLOT(showNormal()));
actExit = new QAction("退出(&Q)",this);
connect(actExit,SIGNAL(triggered()),qApp,SLOT(quit()));
}
void SystemTrayIcon::createTrayMenu()
{
menu = new QMenu((QWidget*)QApplication::desktop());
menu->addAction(actFixed);
menu->addAction(actMin);
menu->addAction(actNormal);
menu->addSeparator(); //加入一個分離符
menu->addAction(actExit);
}
void SystemTrayIcon::createTrayIcon()
{
if (!QSystemTrayIcon::isSystemTrayAvailable()) //判斷系統是否支持系統托盤圖標
{
return;
}
m_trayIcon = new QSystemTrayIcon(pWidget);
m_trayIcon->setIcon(m_icon); //設置圖標圖片
m_trayIcon->setToolTip(m_strList.at(1)); //托盤時,鼠標放上去的提示信息
m_trayIcon->showMessage(m_strList.at(0), m_strList.at(1), QSystemTrayIcon::Information, 10000);
m_trayIcon->setContextMenu(menu); //設置托盤上下文菜單
m_trayIcon->show();
connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this,
SLOT(slot_iconActivated(QSystemTrayIcon::ActivationReason)));
}
void SystemTrayIcon::slot_iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Unknown:
break;
case QSystemTrayIcon::Context:
break;
case QSystemTrayIcon::DoubleClick:
pWidget->setWindowState(Qt::WindowActive);
pWidget->show();
break;
case QSystemTrayIcon::Trigger:
break;
case QSystemTrayIcon::MiddleClick:
break;
default:
break;
}
}
父對象中引用(設置系統托盤):
//設置任務欄系統托盤
QStringList strList;
strList << "Rose" << "Rose V1.0";
QIcon icon(":/images/3.png");
SystemTrayIcon *trayIcon = new SystemTrayIcon(strList, icon, dlg);
connect(trayIcon->actFixed, SIGNAL(triggered(bool)), dlg, SLOT(slot_fixed(bool)));
效果圖: