c++ - 使用 QSqlQueryModel 进行 QT 分页
问题描述
我正在寻找使用 QSqlQueryModel 创建分页的解决方案。
我遇到的问题是我想使用分页从 sql db 文件中提取数据,为此我选择了 QSqlQueryModel。但现在的问题是我无法控制它将获取多少条记录。
基本上,如果数据库中有 1000 条记录,我希望最初只获取 20 个条目,然后在另一个调用 20 个条目时休息,然后在另一个调用 20 个条目等等。怎么做 ?
到目前为止,代码是
QSqlQueryModel *model = new QSqlQueryModel;
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("/Users/xyz/events.db");
if (db.isValid())
{
db.open();
if (db.isOpen())
{
model->setQuery("select * from events");
qDebug() << "I m Working";
QSqlRecord rec = model->record(0);
qDebug() << rec;
qDebug() << model->canFetchMore();
db.close();
} else {
qDebug() << "DB is not open";
}
} else {
qDebug() << "DB is not valid";
}
QSqlQueryModel 中有 canFetchMore() 函数。因此,如果 setQuery 获取所有数据,那么它将始终是错误的,而不是如何调整它,我可以使用 fetchmore() 以受控方式获取更多数据。
谢谢你
解决方案
如果你想知道它是如何QSqlQueryModel
工作的,你应该看看源代码。该类处理(应该处理)开箱即用的部分提取,您不需要实现自己的机制。
基本上,如果视图由于向下滚动而需要显示更多项目,模型会获取另一组(根据实现为 255)行并将它们附加到底部。
基本上所有模型都旨在提供高效的获取。主要思想是视图在需要显示时立即从其模型中请求更多数据。如果您有 1000 个数据项并且视图无法一次显示它们,则不需要全部 1000 个。如果您调试模型,您将看到QAbstractItemModel::data()
函数如何调用以及使用哪些参数:仅提供可见的模型索引。
推荐阅读
- amazon-web-services - AWS 负载均衡器中的会话到期
- python - 如何检查所有语音通道以查看是否有人在其中?
- solr - SOLR 的索引问题(MultiMaxScoreQParserPlugin)
- wavesurfer.js - Wavesurfer.js - 拉伸/收缩区域宽度
- c - 如何将指针传递给另一个函数中的结构数组
- python - discord.py 的良好输出/执行器
- android-studio - 没有管理员我无法下载 intel haxm
- android - 为什么我在使用 Jetpack Compose TextField 时会出错?
- python - 构建 Docker Image 时未找到 tensorflow_cpu==2.3.1 的匹配分布
- java - 如何在 VScode for Linux (Ubuntu) 中安装 Selenium - Java?