- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的类名就像(它做什么)_(类型)例如: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)
“输入”和“注册”代码在这里:
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();
}
最佳答案
您的操作有点超出 Qt 的限制。查看文档:
Generally, no user interaction can take place before calling exec(). As a special case, modal widgets like QMessageBox can be used before calling exec(), because modal widgets call exec() to start a local event loop.
在 Mac OS 上测试你的代码会给你可怕的警告
modalSession has been exited prematurely - check for a reentrant call to endModalSession
这表明您的工作如履薄冰,您的代码随时都会崩溃。
考虑修改您的代码,以便出现 MainWindow,然后显示您的对话框。如果您想继续 Dialog 序列,请从 on_btn_reg_clicked 中删除 hide()/show() 对(这些调用会弄乱您的事件循环)。
关于c++ - QDialog 自行关闭,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571952/
我发现以下帖子非常有帮助: How to pickle yourself? 但是,此解决方案的局限性在于,重新加载类时,它不会以其“运行时”状态返回。即它将重新加载所有变量等以及类在转储时的一般状态.
我是一名优秀的程序员,十分优秀!