对于某些(好的,性能)原因,Qt的“模型”类只从数据库中获取256行,所以如果你想将行追加到记录集的末尾,你显然必须做一些事情。
while (model->canFetchMore()) {
model->fetchMore();
}
这确实有效,当你之后执行model->insertRow(model->rowCount())
时,该行实际上会附加在recorset的最后一行之后。
还有与此行为相关的各种其他问题,例如,当您从模型中插入或删除行时,呈现它的视图会重新绘制,只显示256行,您必须手动确保丢失的行被提取试。
有没有办法完全绕过这种行为?我的模型不太可能显示更多,比如1000行,但是让它检索那1000行似乎是一种皇家的痛苦。我理解,如果你必须处理更大的记录集,这是一个很好的性能优化,但对我来说这是一个负担,而不是一个恩惠。
模型需要是可写的,所以我不能简单地使用QSqlQueryModel而不是QSqlRelationalTableModel。
答案 0 :(得分:3)
来自QSqlTableModel
文档:
bool QSqlTableModel :: insertRecord(int row,const QSqlRecord& record)
在行之后插入记录。 如果行为否定,则记录将附加到结尾。 在内部调用insertRows()和setRecord()。
如果可以插入行,则返回true,否则返回false。
另请参阅insertRows()和removeRows()。
我还没有尝试,但我认为没有必要获取完整的数据集以在最后插入记录。