У меня есть следующая проблема:
У меня есть главное окно Qt, которое запускает несколько диалогов.Через внешний источник я могу скрыть и показать MainWindow.Если диалоговое окно открыто, скрывается только главное окно, но оно все еще отображается.Это не приятно, но не моя главная проблема.Основная проблема заключается в том, что если я закрою диалоговое окно, когда MainWindow скрыто, все приложение завершится.Я не хочу этого, потому что я могу снова сделать мое главное окно видимым из внешнего источника.
Я знаю, что это как-то связано с QApplication quitOnLastWindowClosed.Но если я установил значение true, мое приложение не прекратит работу, если я обычно нажимаю «X».
Вот пример:
// MainApp.h
#include <QMainWindow>
#include "ui_MainWindow.h"
class MainApp : public QObject {
Q_OBJECT
public:
MainApp(QObject *parent = nullptr);
private slots:
void slotOpenDialog();
private:
QMainWindow mMainWindow;
Ui::MainWindow mUi;
};
// MainApp.cpp
#include "MainApp.h"
#include <QTimer>
#include <QMessageBox>
MainApp::MainApp(QObject *parent) {
mUi.setupUi(&mMainWindow);
mMainWindow.show();
connect(mUi.pushButton, &QPushButton::clicked, this, &MainApp::slotOpenDialog);
// simulate external hide and show mechanism
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout,
[=] {
if(mMainWindow.isHidden()) mMainWindow.show();
else mMainWindow.hide();
});
timer->start(3000);
}
void MainApp::slotOpenDialog() {
QMessageBox::information(nullptr, "Info", "text");
}
// main.cpp
#include <QApplication>
#include "MainApp.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainApp* mApp = new MainApp;
// if set true, I can't exit the application with "X"
//a.setQuitOnLastWindowClosed(false);
int error = a.exec();
delete mApp;
return error;
}
Как я могу предотвратить выход из программы, когдаон скрыт, и все еще видимый диалог был закрыт, и как я могу заставить его нормально выйти, когда окно видно?