Qt程序窗口关闭不退出而最小化到托盘的方法
生活随笔
收集整理的這篇文章主要介紹了
Qt程序窗口关闭不退出而最小化到托盘的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、描述
為避免錯點關閉按鈕,使得軟件關閉退出。需要開發一種類似于QQ桌面之類的功能,點擊關閉按鈕并不退出,開發的應用程序在用戶鼠標點擊右上角的關閉按鈕時,程序不退出,縮小到右下角,進入托盤。例如win10右下角的圖標。
?
二、思路
1、需要對應用軟件程序窗口的關閉按鈕進行事件攔截,然后重載,用到QT的QDesktopServices類。
2、要使程序進入托盤,需要用到QT的QSystemTrayIcon類。
?
三、方法
1、添加頭文件和成員
?? ?mainwindow.h?頭文件中添加:#include <QSystemTrayIcon> //t托盤類#include <QDesktopServices> //桌面事件類private:?QMenu *trayMenu;//托盤菜單QSystemTrayIcon *tray;//托盤圖標添加成員2、構造函數初始化??
?? //***托盤***tray= new QSystemTrayIcon(this);//初始化托盤對象traytray->setIcon(QIcon(QPixmap(":/image/image/icon_48px.png")));//設定托盤圖標,引號內是自定義的png圖片路徑tray->setToolTip("My helper"); //提示文字QString title="APP Message";QString text="My helper start up";tray->show();//讓托盤圖標顯示在系統托盤上tray->showMessage(title,text,QSystemTrayIcon::Information,3000); //最后一個參數為提示時長,默認10000,即10s//創建菜單項動作minimizeAction = new QAction("MinWin", this);connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide())); maximizeAction = new QAction("MaxWin", this);connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()))restoreAction = new QAction("restore", this);connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));quitAction = new QAction("exit", this);connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); //關閉應用//創建托盤菜單trayMenu = new QMenu(this);trayMenu->addAction(minimizeAction);trayMenu->addAction(maximizeAction);trayMenu->addAction(restoreAction);trayMenu->addSeparator();trayMenu->addAction(quitAction);tray->setContextMenu(trayMenu);connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));3、添加槽函數??
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason ireason) {switch (ireason){case QSystemTrayIcon::Trigger:this->showNormal();break;case QSystemTrayIcon::DoubleClick:this->showNormal();break;case QSystemTrayIcon::MiddleClick:break;default:break;} }4、攔截桌面窗口事件
void MainWindow::closeEvent(QCloseEvent *event) {if(tray->isVisible()){hide(); //隱藏窗口event->ignore(); //忽略事件} } void MainWindow::hideEvent(QHideEvent *event) {if(tray->isVisible()){hide(); //隱藏窗口event->ignore(); //忽略事件} }?
總結
以上是生活随笔為你收集整理的Qt程序窗口关闭不退出而最小化到托盘的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python csv使用_python
- 下一篇: 几款Android 应用自动化测试工具