QDialog派生表格立即关闭

Srv*_*v19 2 c++ qt

我试图在thr主窗体上单击按钮时显示一个带有数据表的表单.然而,在实践中,第二种形式"眨眼" - 看起来不到第二种 - 然后消失了.可能是什么原因以及如何解决这个问题?

以下是派生表单标题和源文件的内容:

#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;
}
Run Code Online (Sandbox Code Playgroud)

创建第二个窗口的代码:

void MainWindow::on_goodTable_clicked()
{
    QSqlTableModel model;

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

Chr*_*ica 8

问题是,您的on_goodTable_clicked方法中堆栈上有一个本地对话框对象.所以你创建了一个view调用show,它显示了对话框并立即返回,然后view当你离开函数时你的get被破坏了.如果你仍然使用对话框模态,为什么不使用QDialogexec方法intead show.它显示对话框并阻止主窗口,直到您单击对话框的确定​​或取消按钮,然后exec最终返回.如果需要非模态对话框(意味着主窗口工作,对话框打开),则需要动态创建对话框(或使其成为主窗口的成员,或两者兼而有之).