您的位置:首页 > 编程语言 > Qt开发

Qt之设置系统托盘

2016-07-20 13:46 543 查看
头文件:
#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)));
效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: