Qt視窗最小化到托盤,托盤選單控制

2021-06-23 04:57:20 字數 2042 閱讀 9721

作為qt初學者,最近在編寫視窗最小化到托盤功能**的時候遇到了點阻礙。

qt自帶的demo實現的功能太過繁瑣,涉及知識點又太雜,很難理出最核心的思路。網上的文章**也很多脫骨於這個demo,注釋說明太少。

所以自己對比了qt的demo和網上的文章,自己寫了個簡單的最小化到系統托盤的功能。

先看一下**的實現功能:

1.空白視窗,關閉叉叉不會關閉視窗,而是最小化到托盤

2.系統托盤,單擊恢復隱藏視窗

3.系統托盤,右擊出現選單,選單有兩個選項:恢復視窗、關閉程式

再看一下源**(由於功能簡單,所以很多模組功能就沒有單獨編寫函式,都直接寫在了初始化函式中)

標頭檔案mwin.h

#ifndef mwin_h

#define mwin_h

#include #include class mwin : public qwidget

;#endif // mwin_h

解釋檔案mwin.cpp

#include "mwin.h"

mwin::mwin(qwidget *parent) :

qwidget(parent)

void mwin::init()

//***主視窗***

this->setfixedsize(200,200);

//***托盤***

tray=new qsystemtrayicon(this);//初始化托盤物件tray

tray->seticon(qicon(qpixmap(":/image/ico.png")));//設定托盤圖示,引號內是自定義的png路徑

tray->show();//讓托盤圖示顯示在系統托盤上

qobject::connect(tray,signal(activated(qsystemtrayicon::activationreason)),this,slot(trayiconaction(qsystemtrayicon::activationreason)));//連線訊號與槽,實現單擊圖示恢復視窗的功能,槽是自定義的槽

//***初始化托盤選單及功能***

menu=new qmenu(this);//初始化選單

reset=new qaction(this);//初始化恢復視窗

reset->settext("顯示視窗");

qobject::connect(reset,signal(triggered()),this,slot(shownormal()));//選單中的顯示視窗,單擊連線顯示視窗

quit=new qaction(this);//初始化退出程式

quit->settext("退出程式");

//之所以不用this,close(),是由於軟體要求關閉改為最小化到托盤,所以close()的功能已經不再是關閉視窗的功能,所以要另尋方法

//***將定義好的選單加入托盤的選單模組中***

tray->setcontextmenu(menu);

menu->addaction(reset);

menu->addaction(quit);

}//***重置關閉close()***

void mwin::closeevent(qcloseevent *event)

//因為實現的是關閉視窗至系統托盤,所以我們先將視窗hide()隱藏,再忽略關閉視窗功能event->ignore()即可。

//***托盤圖示槽***

void mwin::trayiconaction(qsystemtrayicon::activationreason reason)

//引數是qt的保留字,表示對托盤圖示的操作,該槽函式功能只實現了單擊功能,可以實現其他功能比如雙擊、中擊,具體可查文件或者qt自帶demo(關鍵字tray)

主函式呼叫測試main.cpp

#include #include "mwin.h"

int main(int argc,char *argv)

Qt視窗最小化到托盤,托盤選單控制

作為qt初學者,最近在編寫視窗最小化到托盤功能 的時候遇到了點阻礙。qt自帶的demo實現的功能太過繁瑣,涉及知識點又太雜,很難理出最核心的思路。網上的文章 也很多脫骨於這個demo,注釋說明太少。所以自己對比了qt的demo和網上的文章,自己寫了個簡單的最小化到系統托盤的功能。先看一下 的實現功能...

視窗最小化到托盤

使用notifyicon控制項和contextmenustrip控制項實現 1.將notifyicon控制項和contextmenustrip控制項拖到form上 2.在form的formclosing事件 取消關閉窗體 e.cancel true 將窗體變為最小化 this.windowstate...

MFC 最小化到托盤及右擊托盤選單

全域性變數 notifyicondata nid 托盤圖示全域性變數 在stdafx.h define wm showtask wm user 123 關聯訊息對映函式 位於begin message map與end message map之間 on message wm showtask,onsh...