QT分页使用QSqlQueryModel
QT paging using QSqlQueryModel
我正在寻找使用 QSqlQueryModel 创建分页的解决方案。
我遇到的问题是我想使用分页从 sql 数据库文件中提取数据,为此我选择了 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() 以受控方式获取更多数据。
谢谢
你想要的是pagination/paging,不是吗?
来自 https://doc.qt.io/qt-5/qsqlquerymodel.html#details
QSqlQueryModel 是执行SQL 语句和遍历结果集的高级接口。它建立在较低级别的QSqlQuery之上,可以用来提供数据给视图类比如QTableView
sqlite 中有分页问题。 Efficient paging in SQLite with millions of records
如果您想知道 QSqlQueryModel
是如何工作的,您应该查看 source code。 class 处理(应该处理)开箱即用的部分提取,您不需要实现自己的机制。
基本上,如果视图由于向下滚动而需要显示更多项目,模型会获取另一组(根据实现为 255)行并将它们附加到底部。
基本上所有模型都旨在提供性能高效的抓取。主要思想是视图在需要显示时立即从其模型请求更多数据。如果您有 1000 个数据项并且视图无法一次显示它们,则不需要全部 1000 个。如果您调试模型,您将看到 QAbstractItemModel::data()
函数是如何调用的以及使用哪些参数:仅可见提供模型索引。
我正在寻找使用 QSqlQueryModel 创建分页的解决方案。
我遇到的问题是我想使用分页从 sql 数据库文件中提取数据,为此我选择了 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() 以受控方式获取更多数据。
谢谢
你想要的是pagination/paging,不是吗? 来自 https://doc.qt.io/qt-5/qsqlquerymodel.html#details
QSqlQueryModel 是执行SQL 语句和遍历结果集的高级接口。它建立在较低级别的QSqlQuery之上,可以用来提供数据给视图类比如QTableView
sqlite 中有分页问题。 Efficient paging in SQLite with millions of records
如果您想知道 QSqlQueryModel
是如何工作的,您应该查看 source code。 class 处理(应该处理)开箱即用的部分提取,您不需要实现自己的机制。
基本上,如果视图由于向下滚动而需要显示更多项目,模型会获取另一组(根据实现为 255)行并将它们附加到底部。
基本上所有模型都旨在提供性能高效的抓取。主要思想是视图在需要显示时立即从其模型请求更多数据。如果您有 1000 个数据项并且视图无法一次显示它们,则不需要全部 1000 个。如果您调试模型,您将看到 QAbstractItemModel::data()
函数是如何调用的以及使用哪些参数:仅可见提供模型索引。