使用QTableView和QSqlTableModel进行类似网格的内联编辑

时间:2012-06-27 04:44:21

标签: sql qt qsqltablemodel

我试图让QTableView表现得像一个网格表,即底部总有一个空行,用户输入要插入的新记录。想想MS Access子窗体,或者在Web开发中我认为我们称之为内联编辑。

我正在使用Qt 4.7.4, 非常标准的代码:

model = new QSqlTableModel(this);
model->setTable("order_details");
models->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setFilter(QString("parent_id = '%1'").arg(ID->toString());
model->select();
model->insertRow(model->rowCount());  //worked womehow
//QSqlRecord rec = model->record();
//rec.setValue("fieldName", var);  //useful for initializing some fields
//model->insertRecord(-1, rec);  //internally call insertRow(rowCount()) then setRecord

ui->tblGrid->setModel(model);

如果将insertRow或insertRecord放入构造函数中,则不会发生任何事情。没有添加行。 但是,如果我创建一个调用其中任何一个按钮的按钮,则会添加一个新行但不可编辑

要观察此尝试修改Qt's cached table example,添加insertRow()如果放入构造函数则不会执行任何操作。然而,在从按钮调用的插槽中,它将添加该行就好了。当然是不可编辑的。

所以我的问题是:

  1. 为什么会这样?我已经对QSqlTableModel的源代码有了足够的了解,但为了理解它我们还需要了解QSqlRecord,QSqlQuery,QAbstractItemModel等......无法理解它。
  2. 为了解决不可编辑的行问题,我已经将QSqlTableModel的子类重写为覆盖了Qt :: ItemIsEditable和Qt :: ItemIsenabled无效。我做错了什么?
  3. 我知道我最终会将QTableView子类化以获得此行为,所以如果有人对我有一些指示,我会很感激,也许我可以阅读一些项目的来源。
  4. 谢谢,

    埃文

0 个答案:

没有答案