我试图在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;
}
创建第二个窗口的代码:
void MainWindow::on_goodTable_clicked()
{
QSqlTableModel model;
initializeGoodModel(&model);
//! [4]
GoodTable view(NULL,&model);
view.setWindowFlags(Qt::Window);
view.setWindowModality(Qt::ApplicationModal);
view.show();
}
答案 0 :(得分:7)
问题是,您在on_goodTable_clicked
方法中的堆栈上有一个本地对话框对象。因此,您创建view
,调用show
,显示对话框并立即返回,然后在您离开函数时销毁view
get。如果您仍然使用对话框模态,为什么不使用QDialog
的{{1}}方法exec
。它显示对话框并阻止主窗口,直到您单击对话框的确定或取消按钮,然后show
最终返回。如果需要非模态对话框(意味着主窗口工作,对话框打开),则需要动态创建对话框(或使其成为主窗口的成员,或两者都有)。