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

歡迎訪問 生活随笔!

生活随笔

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

windows

pyqt5 最小化 系统托盘_Qt中如何使窗口隐藏/最小化到托盘

發布時間:2023/12/10 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyqt5 最小化 系统托盘_Qt中如何使窗口隐藏/最小化到托盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

展開全部

功能62616964757a686964616fe78988e69d8331333361303733:窗口最小化后或者點擊“hide”按鈕將窗口隱藏到托盤。

通常最小化的窗口會在任務欄上顯示一個按鈕。當用戶按一下這個按鈕,窗口就還原了。這是一個被大多數桌面環境,比如Windows,KDE,GNOME所采用的普遍設計。不過,因為任務欄通常只是桌面邊上一小行,容納不了很多按鈕,用戶通常希望把那些不常用的程序隱藏起來,只在通知欄顯示一個小圖標,要使用的時候再點擊那個小圖標恢復窗口。這種作法最典型的例子是QQ和Winamp。

最基本的思路是攔截窗口的最小化事件changeEvent(),通過重寫changeEvent()即可。

“hide”按鈕的方式,是通過信號--槽來實現。

--------------------------------------------------------------------

void TrayMenu::createActions()

{

//創建托盤項

action_show = new QAction(this);

action_quit = new QAction(this);

action_login_home = new QAction(this);

action_help = new QAction(this);

action_about = new QAction(this);

action_check_update = new QAction(this);

action_setting = new QAction(this);

//設置托盤項圖標

action_show->setIcon(QIcon(":/icon/open"));

action_login_home->setIcon(QIcon(":/icon/home"));

action_help->setIcon(QIcon(":/icon/help"));

action_about->setIcon(QIcon(":/icon/about"));

action_check_update->setIcon(QIcon(":/icon/update"));

action_setting->setIcon(QIcon(":/icon/set"));

action_quit->setIcon(QIcon(":/icon/quit"));

//加載圖片和提示

QIcon icon(":/images/sysTray.png");

systemTray = new QSystemTrayIcon(this);

systemTray->setIcon(icon);

systemTray->setToolTip("Hello, this is system tray!");

注意:這里特別提醒,如果你的應用程序要移植到別的機器上,而且這個機器沒有裝Qt,QIcon的圖片格式最好用png,而不要用ico等格式,否則托盤圖標不能顯示,會很麻煩。

//設置托盤想文本

action_show->setText(QString("顯示"));

action_quit->setText(QString("退出"));

action_login_home->setText(QString("登錄網頁"));

action_help->setText(QString("幫助"));

action_about->setText(QString("關于"));

action_check_update->setText(QString("檢查更新"));

action_setting->setText(QString("設置"));

//添加菜單項

this->addAction(action_show);

this->addAction(action_setting);

this->addAction(action_login_home);

this->addSeparator();

this->addAction(action_help);

this->addAction(action_about);

this->addAction(action_check_update);

this->addSeparator();

this->addAction(action_quit);

action_setting->setVisible(false);

//設置信號連接(這里僅列舉連接顯示窗口的信號)

QObject::connect(action_show, SIGNAL(triggered(bool)), this, SIGNAL(showWidget()));

}

LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent)

{

QSystemTrayIcon *system_tray = new QSystemTrayIcon();

//放在托盤提示信息、托盤圖標

system_tray ->setToolTip(QString("我就是托盤"));

system_tray ->setIcon(QIcon(":/icon/login"));

TrayMenu *tray_menu = new TrayMenu();

system_tray->setContextMenu(tray_menu);

//點擊托盤執行的事件

connect(system_tray , SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));

connect(tray_menu, SIGNAL(showWidget()), this, SLOT(showNormal()));

//顯示托盤

system_tray->show();

//托盤顯示提示信息

system_tray->showMessage(QString("托盤標題"), QString("托盤顯示內容"));

}

void LoginDialog::iconIsActived(QSystemTrayIcon::ActivationReason reason)

{

switch(reason)

{

//點擊托盤顯示窗口

case QSystemTrayIcon::Trigger:

{

showNormal();

break;

}

//雙擊托盤顯示窗口

case QSystemTrayIcon::DoubleClick:

{

showNormal();

break;

}

default:

break;

}

}

OK,這樣我們的托盤功能就Over了!

=============================================================================

另://關閉到托盤

void Widget::closeEvent(QCloseEvent *e)

{

e->ignore();

this->hide();

}

//最小化到托盤

void Widget::changeEvent(QEvent *e)

{

if((e->type()==QEvent::WindowStateChange)&&this->isMinimized())

{

QTimer::singleShot(100, this, SLOT(close()));

}

}

或者(me)

//點擊窗口的“最小化"按鈕會調用此函數(系統默認)---已實現

void maxLinksGuard::changeEvent(QEvent * event )

{

if(event->WindowStateChange)

{

switch(this->windowState())

{

//點擊“最小化”按鈕

case Qt::WindowMinimized:

this->hide();

this->setWindowFlags(Qt::Tool);//隱藏任務欄上圖標

systemTray->show();//顯示托盤

systemTray->showMessage(windowTitle(),"Here is system,double click will show!");//提示

event->ignore();

break;

default:

break;

}

}

}

//托盤圖標事件--------已實現

void maxLinksGuard::iconActivated(QSystemTrayIcon::ActivationReason reason)

{

switch (reason)

{

//單擊托盤

case QSystemTrayIcon::Trigger:

{

if(!this->isVisible())

{

this->setWindowFlags(Qt::Window); //顯示之前恢復

showNormal();

}

else

{

hide();

}

break;

}

//雙擊托盤---貌似不起作用

case QSystemTrayIcon::DoubleClick:

{

if(!this->isVisible())

{

this->setWindowFlags(Qt::Window); //顯示之前恢復

showNormal();

}

else

{

hide();

}

break;

}

case QSystemTrayIcon::MiddleClick:

{

break;

}

default: ;

}

}

//點擊窗口的“關閉”按鈕觸發closeEvent事件(關閉應用程序)----已實現

void maxLinksGuard::closeEvent(QCloseEvent *event)

{

if (this->isVisible())

{

QMessageBox::critical(NULL,QObject::tr("Prompt:"),QObject::tr("Are you sure you want to kill/stop the MaxLinksGuard?"));

event->ignore();

}

else

{

event->accept();

}

}

==========================================================

已贊過

已踩過<

你對這個回答的評價是?

評論

收起

總結

以上是生活随笔為你收集整理的pyqt5 最小化 系统托盘_Qt中如何使窗口隐藏/最小化到托盘的全部內容,希望文章能夠幫你解決所遇到的問題。

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