c++ - QDialog 派生窗体立即关闭

标签 c++ qt

我试图在主窗体上单击按钮时显示一个带有数据表的窗体。然而,在实践中,第二种形式“闪烁”——出现的次数少于第二次——然后消失了。可能是什么原因以及应该如何解决?

这里是派生的表单头和源文件的内容:

#ifndef GOODTABLE_H
#define GOODTABLE_H

#include <QDialog>
#include <QSqlTableModel>
namespace Ui {
    class GoodTable;
}

class GoodTable : public QDialog
{
    Q_OBJECT

public:
    explicit GoodTable(QDialog *parent = 0);
    GoodTable(QDialog *parent,QSqlTableModel* model);
    ~GoodTable();

private:
    Ui::GoodTable *ui;
};

#endif // GOODTABLE_H

#include "goodtable.h"
#include "ui_goodtable.h"

GoodTable::GoodTable(QDialog *parent) :
    QDialog(parent),
    ui(new Ui::GoodTable)
{
    ui->setupUi(this);
}
GoodTable::GoodTable(QDialog *parent,QSqlTableModel* model) :
    QDialog(parent),
    ui(new Ui::GoodTable)
{
    ui->setupUi(this);
    ui->tableView->setModel(model);
}
GoodTable::~GoodTable()
{
    delete ui;
}

创建第二个窗口的代码:

void MainWindow::on_goodTable_clicked()
{
    QSqlTableModel model;

    initializeGoodModel(&model);
    //! [4]
    GoodTable view(NULL,&model);
    view.setWindowFlags(Qt::Window);
    view.setWindowModality(Qt::ApplicationModal);
    view.show();
}

最佳答案

问题是,您在 on_goodTable_clicked 方法的堆栈上有一个本地对话框对象。因此,您创建了 view,调用 show,它显示对话框并立即返回,然后您的 view 在您离开该函数时被销毁。如果无论如何都使对话框成为模态对话框,为什么不使用 QDialogexec 方法而不是 show。它显示对话框并阻塞主窗口,直到您单击对话框的“确定”或“取消”按钮,然后 exec 最终返回。当你想要一个非模态对话框(意味着你的主窗口工作,而对话框是打开的)时,你需要动态创建你的对话框(或让它成为你的主窗口的成员,或两者兼而有之)。

关于c++ - QDialog 派生窗体立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091895/

相关文章:

c++ - 用于进程间共享内存的非 Boost STL 分配器?

c++ - UDP套接字缓冲区溢出检测

c++ - openmp 代码的性能以及如何使其更快

c++ - 如何在 Qt 中取消设置标志?

c++ - Qt/C++ 在远程机器上执行命令并与其提示交互

python - 缺少 PyQt QML 错误控制台

qt - 为什么 qtsettings 以奇怪的模式存储 float ,缺少什么?

c++ - [[nodiscard]] 在 std::function 返回类型定义中?

c++ - 在不列出所有可能组合的情况下编写饱和转换运算符

qt - TableView 上的 Keys.onPressed 调用了两次