我遇到以下问题:
我有一个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;
}
如何在隐藏程序且关闭了仍然可见的对话框的情况下阻止程序退出?如何在窗口可见时正常退出程序?
答案 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()
连接到该信号并仅在需要时退出来解决该问题。