首页 > 代码库 > Qt实现系统托盘
Qt实现系统托盘
平时大多数看到的软件都是带系统托盘的,这样软件可以在后台运行,挺好的。今天看了下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>
基本代码就这些。
需要代码的可以留下邮箱,发给你们……
技术在于交流……
Qt实现系统托盘
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。