如果QMainWindow隐藏,则关闭对话框退出应用程序

时间:2019-02-12 08:23:31

标签: c++ qt

我遇到以下问题:

我有一个Qt MainWindow,它启动了几个对话框。通过外部源,我可以隐藏和显示MainWindow。如果打开对话框,则仅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 :(得分:1)

QApplication发出信号“ lastWindowClosed”,并且具有一个df1['Result'] = np.where(pd.merge(df1,df2, on='key', suffixes=('_x', '_match'), how='left')['id_match'].fillna('Not Found')!='Not Found','Found','Not Found') 插槽。如评论中所述,可以通过将自己的插槽quit()连接到该信号并仅在需要时退出来解决该问题。