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