0
我正在開發一個程序,它可以最小化托盤並隱藏主窗口。我希望當我點擊托盤圖標時顯示主窗口。這通常起作用,但我發現如果程序使用QFileDialog :: getOpenFileName選擇文件並且沒有關閉對話框時,程序最小化爲托盤,我無法激活trayicon。有誰知道如何解決它?我在Manjaro Linux上使用Qt 5.9.0。對話框打開時無法激活trayicon
最小,完整的,並且可驗證例如:
main.cpp中:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSystemTrayIcon>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QSystemTrayIcon *trayIcon;
QMenu *trayContextMenu;
QAction *actShow;
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *);
private slots:
void on_pushButton_clicked();
void trayIcon_activated(QSystemTrayIcon::ActivationReason reason);
void actShow_Triggered();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
trayIcon=new QSystemTrayIcon;
trayIcon->setIcon(QIcon("hmtimer.png"));
trayContextMenu=new QMenu;
actShow=trayContextMenu->addAction(tr("Show"));
trayIcon->setContextMenu(trayContextMenu);
connect(actShow,&QAction::triggered,
this,&MainWindow::actShow_Triggered);
connect(trayIcon,&QSystemTrayIcon::activated,
this,&MainWindow::trayIcon_activated);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *event)
{
if(event->type()==QEvent::WindowStateChange){
if(isMinimized()){
this->hide();
trayIcon->show();
}
}
else{
QMainWindow::changeEvent(event);
}
}
void MainWindow::on_pushButton_clicked()
{
QFileDialog::getOpenFileName(this,QString());
}
void MainWindow::trayIcon_activated(QSystemTrayIcon::ActivationReason reason)
{
if(reason==3){ //reason==Trigger
this->show();
trayIcon->hide();
}
}
void MainWindow::actShow_Triggered()
{
this->show();
trayIcon->hide();
}
的例子可以下載here
看來,如果程序最小化托盤QFileDialog::getOpenFileName(this,QString())
沒有關閉,我不能讓主窗口出現點擊托盤圖標或右鍵單擊以顯示上下文菜單。
請你能提供一個[最小,完整,可驗證的示例](https://stackoverflow.com/help/mcve)我提供了一個例子 – eyllanesc
@eyllanesc。 (有porviding代碼要比將其粘貼在每行前添加四個空格更好的辦法?) – cges30901
你是什麼意思與4號線在前面? – eyllanesc