3

由于某些(嗯,性能)原因,Qt 的“模型”类仅从数据库中获取 256 行,因此如果您想将该行附加到记录集的末尾,显然,您必须按照以下方式进行操作

while (model->canFetchMore()) {
  model->fetchMore();
}

这确实有效,当您model->insertRow(model->rowCount())之后执行此操作时,该行确实会附加在记录集的最后一行之后。

还有与此行为相关的各种其他问题,例如当您从模型中插入或删除行时,呈现它的视图将被重绘,仅显示 256 行,您必须手动确保再次获取丢失的行。

有没有办法完全绕过这种行为?我的模型不太可能显示多于 1000 行,但是让它检索这 1000 行似乎是一件非常痛苦的事情。我知道,如果您必须处理更大的记录集,这是一个很好的性能优化,但对我来说,这是一种负担,而不是一种恩惠。

该模型需要是可写的,所以我不能简单地使用 QSqlQueryModel 代替 QSqlRelationalTableModel。

4

1 回答 1

4

QSqlTableModel文档中:

bool QSqlTableModel::insertRecord ( int row, const QSqlRecord & record )

在行之后插入记录。如果 row 为负数,则记录将附加到末尾。 在内部调用 insertRows() 和 setRecord()。

如果可以插入行,则返回 true,否则返回 false。

另请参见 insertRows() 和 removeRows()。

我还没有尝试过,但我认为没有必要获取完整的数据集以在最后插入记录。

于 2012-05-26T01:46:24.843 回答