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>
基本代碼就這些。
需要代碼的可以留下郵箱,發給你們……
技術在於交流……