日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

qt 最小化到托盘linux,Qt窗口最小化到托盘,托盘菜单控制

發布時間:2024/1/23 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt 最小化到托盘linux,Qt窗口最小化到托盘,托盘菜单控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

先看一下代碼的實現功能:

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

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

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

再看一下源代碼(由于功能簡單,所以很多模塊功能就沒有單獨編寫函數,都直接寫在了初始化函數中)

頭文件mwin.h

#ifndef MWIN_H

#define MWIN_H

#include

#include

class MWin : public QWidget

{

Q_OBJECT

public:

explicit MWin(QWidget *parent = 0);

void init();//初始化函數

QSystemTrayIcon *tray;//托盤圖標

QMenu *menu;//托盤菜單

QAction *reset;//菜單實現功能:恢復窗口

QAction *quit;//菜單實現功能:退出程序

protected:

void closeEvent(QCloseEvent *event);//由于要關閉窗口變為隱藏至托盤圖標,所以要重寫close事件

signals:

public slots:

void TrayIconAction(QSystemTrayIcon::ActivationReason reason);//對托盤圖標操作的槽:本代碼實現單機圖標恢復窗口功能

};

#endif // MWIN_H

解釋文件mwin.cpp

#include "mwin.h"

MWin::MWin( QWidget *parent ) :

QWidget( parent )

{

init(); /* 初始化 */

}

void MWin::init()

{

/****主窗口****/

this->setFixedSize( 200, 200 );

this->setWindowTitle( "托盤APP" );

/****托盤*** */

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( "退出程序" );

QObject::connect( quit, SIGNAL( triggered() ), qApp, SLOT( quit() ) ); /* 菜單中的退出程序,單擊連接退出 */

/*

* qApp,是Qt自帶的demo中的知識點,查了一下文檔,qApp是Qt中所有app的指針,關閉它就可以關閉當前的程序

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

* 將定義好的菜單加入托盤的菜單模塊中

*/

tray->setContextMenu( menu );

menu->addAction( reset );

menu->addAction( quit );

}

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

void MWin::closeEvent( QCloseEvent *event )

{

hide(); /* 隱藏窗口 */

event->ignore(); /* 忽略關閉事件 */

}

/*

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

* ***托盤圖標槽***

*/

void MWin::TrayIconAction( QSystemTrayIcon::ActivationReason reason )

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

{

if ( reason == QSystemTrayIcon::Trigger )

this->showNormal(); /* 如果對圖標進行單擊,則顯示正常大小的窗口 */

}

主函數調用測試main.cpp

#include

#include "mwin.h"

int main(int argc,char *argv[])

{

QApplication app(argc,argv);

//***三行編碼設置,保證中文字符***

//本機電腦是UTF-8編碼,其他電腦自行調試修改編碼

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

MWin *win=new MWin();

win->show();

return app.exec();

}

總結

以上是生活随笔為你收集整理的qt 最小化到托盘linux,Qt窗口最小化到托盘,托盘菜单控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。