【发布时间】:2019-10-26 15:01:59
【问题描述】:
我的班级名称就像(它的作用)_(类型)例如:reg_QDialog
这是执行 dlg 的代码,如果被接受,则创建 QMainWindow:
if(log_dlg->exec() == QDialog::Accepted)
{
find_wnd = new find_QMainWindow();
find_wnd->show();
}
log_dlg 有 2 个 btns:“Enter”(这里是接受结果)和“Reg”(打开一个新的 dlg)
“Enter”和“Reg”代码在这里:
void log_QDialog::on_btn_enter_clicked()
{
this->accept();
}
void log_QDialog::on_btn_reg_clicked()
{
reg_QDialog *reg_dlg = new reg_QDialog();
this->hide();
if(reg_wnd->exec() == QDialog::Accepted)
{
//code
}
this->show();
}
那么,问题来了:
Step by step:
1) run the prog //it starts with dlg_log
2) "Reg" //creating dlg_reg
3) accept dlg_reg //returning to dlg_log
4) "Enter" //trying to create QMainWindow
QMainWindow is not created, and the app just closed
从 reg_dlg 中“返回”(实际上只是隐藏然后显示)并以接受结果推送 btn 之后,它什么也不做!它只是关闭程序,但它必须显示 QMainWindow!
main.cpp的所有真实代码:
#include "log_window_root.h"
#include "find_mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
log_window_root * log_wnd;
find_mainwindow * find_wnd;
log_wnd = new log_window_root();
log_wnd->setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
log_wnd->setModal(true);
if(log_wnd->exec() == QDialog::Accepted)
{
find_wnd = new find_mainwindow();
find_wnd->setWindowFlags(Qt::MSWindowsFixedSizeDialogHint);
find_wnd->show();
}
return a.exec();
}
【问题讨论】:
-
请将整个代码上传到某个地方。当您关闭唯一剩余的窗口时,似乎没有事件循环。您是否在没有 QGuiApplication 实例的情况下执行此操作?
-
好的,我上传了main.cpp的全部代码。是否也需要另一个?事实上,我只是创建了一个 QtWidget 项目。
-
@SoheilArmin,对不起,你说“没有事件循环”是什么意思?