我试图在主窗体上单击按钮时显示一个带有数据表的窗体。然而,在实践中,第二种形式“闪烁”——出现的次数少于第二次——然后消失了。可能是什么原因以及应该如何解决?
这里是派生的表单头和源文件的内容:
#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
在您离开该函数时被销毁。如果无论如何都使对话框成为模态对话框,为什么不使用 QDialog
的 exec
方法而不是 show
。它显示对话框并阻塞主窗口,直到您单击对话框的“确定”或“取消”按钮,然后 exec
最终返回。当你想要一个非模态对话框(意味着你的主窗口工作,而对话框是打开的)时,你需要动态创建你的对话框(或让它成为你的主窗口的成员,或两者兼而有之)。
关于c++ - QDialog 派生窗体立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091895/