最近RunCat非常火热,也在学习qt,尝试用qt实现一下,主要是动态托盘效果的实现,和微信、QQ收到新消息类似,定时切换ico。
实现了以下功能,切换CPU 、内存,是否联网,右键菜单,点击弹框、设置开机自启动,切换托盘托表、查看电脑系统信息等
#include <QSystemTrayIcon>
#include <QTimer>
#include "optiondlg.h"
/
class RunCat : public QObject
{
Q_OBJECT
public:
RunCat(QObject *parent = 0);
~RunCat();
........略
}
void RunCat::initTrayIcon()//初始化托盘
{
if (NULL != pSystemTray)
{
pSystemTray->setIcon(QIcon(":/icon/appIcon.ico"));
pSystemTray->setContextMenu(menu_);
pSystemTray->show();
}
}
void RunCat::showMessage()//点击弹窗信息
{
QString info;
info.sprintf ("CPU使用率:%.2lf\%\n内存使用率:%.2lf\%",p_sysinfo->cpuLoadAverage(),p_sysinfo->memoryUsed ());
pSystemTray->showMessage(QString::fromLocal8Bit("系统信息"),//消息窗口标题
QString::fromLocal8Bit(info.toAscii ().data ()),//消息内容
QSystemTrayIcon::NoIcon,//消息窗口图标
5000);//消息窗口显示时长
}
//响应鼠标事件
void RunCat::trayActivatedEvent(QSystemTrayIcon::ActivationReason _action)
{
switch (_action)
{
case QSystemTrayIcon::Context:
break;
case QSystemTrayIcon::DoubleClick:
break;
case QSystemTrayIcon::MiddleClick:
break;
case QSystemTrayIcon::Trigger:
showMessage();
break;
}
}
//定时切换ico图元就可以实现动态托盘效果
void RunCat::on_TimeOut_slot()
{
if(iconIdx< MaxRang)
{
pSystemTray->setIcon(TrayIcon[iconIdx]);
iconIdx++;
}
else
{
iconIdx =0;
}
}