平时大多数看到的软件都是带系统托盘的,这样软件可以在后台运行,挺好的。今天看了下Qt自带的demon,中间有参考了下,实现了这个小小的功能,就将这个功能添加到了自己之前的一个项目中,效果蛮好的。界面如下所示:
右击系统托盘就会显示当前设定的各个菜单功能:
怎么样,效果还好吧。实现这个小功能厅满意的。右键点击弹出的菜单可以自行设定所需的。另外可以设定鼠标单击、双击、中间键分别按下时所触发的动作。主要代码如下所示:
1、首先需要添加头文件,Qsystem/trayIcon类、QMenu类和QAction三个类
<span style="font-size:18px;"><strong> QSystemTrayIcon *myTrayIcon; //系统托盘指针
QMenu *myMenu; //系统托盘菜单
QAction *miniSizeAction; //最小化
QAction *maxSizeAction; //最大化
QAction *restoreWinAction; //还原
QAction *quitAction; //退出
QAction *checkUpdate; //检查更新</strong></span>
功能功能实现:
<span style="font-size:18px;"><strong>/*
*函数功能:创建系统托盘菜单
*输入参数:无
*输出参数:无
*说明:此函数用于创建系统托盘的菜单,提供用户点击相应的菜单进行操作
*/
void MainWindow::CreateTrayMenu()
{
miniSizeAction = new QAction(tr("最小化(&N)"),this);
miniSizeAction->setToolTip(tr("最小化"));
miniSizeAction->setIcon(QIcon(":/images/systemtrayico/minac.png"));
maxSizeAction = new QAction(tr("最大化(&X)"),this);
maxSizeAction->setToolTip(tr("最大化"));
maxSizeAction->setIcon(QIcon(":/images/systemtrayico/maxac.png"));
restoreWinAction = new QAction(tr("还原(&R)"),this);
restoreWinAction->setToolTip(tr("还原"));
restoreWinAction->setIcon(QIcon(":/images/systemtrayico/restoreac.png"));
quitAction = new QAction(tr("退出(&Q)"),this);
quitAction->setToolTip(tr("退出"));
quitAction->setIcon(QIcon(":/images/systemtrayico/exitac.png"));
checkUpdate = new QAction(tr("检查更新(&C)"),this);
checkUpdate->setToolTip(tr("检查更新"));
checkUpdate->setIcon(QIcon(":/images/systemtrayico/updateac.png"));
//将各个菜单进行槽连接,触发相应的动作
connect(miniSizeAction,SIGNAL(triggered()),this,SLOT(hide()));
connect(maxSizeAction,SIGNAL(triggered()),this,SLOT(showMaximized()));
connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(showNormal()));
connect(quitAction,SIGNAL(triggered()),this,SLOT(logoutWidget()));
connect(checkUpdate,SIGNAL(triggered()),this,SLOT(checkSysUpdate()));
//将创建的菜单对象添加到系统托盘的菜单中
myMenu = new QMenu((QWidget*)QApplication::desktop());
myMenu->addAction(miniSizeAction);
myMenu->addAction(maxSizeAction);
myMenu->addAction(restoreWinAction);
myMenu->addSeparator();
myMenu->addAction(checkUpdate);
myMenu->addSeparator(); //加入一个分隔符
myMenu->addAction(quitAction);
}
/*
*函数功能:创建软件最小化时的系统图标以及一些信息的显示
*说明:对系统是否支持系统图盘图标特效作出判断,支持就执行相应的动作
*/
void MainWindow::CreateTrayIcon()
{
CreateTrayMenu();
//判断系统是否支持系统托盘图标
if(!QSystemTrayIcon::isSystemTrayAvailable())
{
return;
}
myTrayIcon = new QSystemTrayIcon(this);
myTrayIcon->setIcon(QIcon(":/images/main.png"));
myTrayIcon->setToolTip(tr("大众超市收银系统 V2.0"));
myTrayIcon->showMessage("大众软件","软件进入了最小化模式,若想恢复,点击还原",QSystemTrayIcon::Information,10000);
myTrayIcon->setContextMenu(myMenu);
myTrayIcon->show();
connect(myTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconAcitvated(QSystemTrayIcon::ActivationReason)));
}</strong></span>
鼠标点击事件处理:
<span style="font-size:18px;"><strong>/*
*函数功能:执行鼠标点击系统托盘菜单后相应的动作
*说明:当鼠标点击菜单时所触发的动作
* (左、右)单击、双击、中间按钮。可以对这几个动作分别处理相应的事件
*/
void MainWindow::iconAcitvated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger:
this->showNormal();
break;
case QSystemTrayIcon::DoubleClick:
this->showMaximized();
break;
case QSystemTrayIcon::MiddleClick:
//
break;
default:
break;
}
}</strong></span>
基本代码就这些。
需要代码的可以留下邮箱,发给你们……
技术在于交流……