Закрытие диалога завершает работу приложения, если QMainWindow скрыто - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть следующая проблема:

У меня есть главное окно 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;
}

Как я могу предотвратить выход из программы, когдаон скрыт, и все еще видимый диалог был закрыт, и как я могу заставить его нормально выйти, когда окно видно?

1 Ответ

0 голосов
/ 12 февраля 2019

QApplication испускает сигнал "lastWindowClosed" и имеет слот quit().Как упоминалось в комментариях, проблему можно решить, подключив собственный слот onLastWindowClosed() к этому сигналу и выйдя только тогда, когда вы захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...