禁用QSql(Relational)TableModel的预取/缓存行为

时间:2012-05-25 19:40:24

标签: c++ qt qsqltablemodel

对于某些(好的,性能)原因,Qt的“模型”类只从数据库中获取256行,所以如果你想将行追加到记录集的末尾,你显然必须做一些事情。

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

这确实有效,当你之后执行model->insertRow(model->rowCount())时,该行实际上会附加在recorset的最后一行之后。

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

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

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

1 个答案:

答案 0 :(得分:3)

来自QSqlTableModel文档:

  

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

     

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

     

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

     

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

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