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

标签 c++ qt qsqltablemodel

出于某些(好吧,性能)原因,Qt 的“模型”类仅从数据库中获取 256 行,因此如果您想将该行追加到记录集的末尾,显然,您必须按照以下方式做一些事情

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

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

存在与此行为相关的各种其他问题,例如当您从模型中插入或删除行时,呈现它的 View 会重新绘制,只显示 256 行,您必须手动确保获取缺失的行再次。

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

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

最佳答案

来自 QSqlTableModel 文档:

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

Inserts the record after row. If row is negative, the record will be appended to the end. Calls insertRows() and setRecord() internally.

Returns true if the row could be inserted, otherwise false.

See also insertRows() and removeRows().

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

关于c++ - 禁用 QSql(Relational)TableModel 的预取/缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760455/

相关文章:

C++ 代码 : count not working

c++ - 如何使用 boost::weak_ptr 在构造函数中实现对对象的弱引用?

c++ - 如何查询本地的QSqlQueryModel?

qt - 将颜色设置为 QTableView 行

c++ - 内联函数/变量的外部链接

c++ - BMP文件行填充问题

C++ ifstream 长完整路径不起作用

c++ - 如何在 QT 中跟踪发射信号?

qt - QML,将多个网格组合成单个实体

python - PyQt4 QTableView中的选定项文本一键延迟