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中如何使窗口隐藏/最小化到托盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5万存余额宝一年利息多少?怎么计算?(附
- 下一篇: 人去世后买的理财产品钱可以取出来吗?取出