我正在寻找使用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";
}canFetchMore()函数存在于QSqlQueryModel中。因此,如果setQuery获取所有数据,那么它将始终是错误的,而不是如何调整它,因此我可以使用fetchmore()以受控的方式获取更多的数据。
谢谢
发布于 2019-09-24 12:53:32
如果您想知道QSqlQueryModel是如何工作的,应该查看源代码。类句柄(应该处理)部分开箱即用,您不需要实现自己的机制。
基本上,如果视图由于向下滚动而需要显示更多的项,模型将获取另一组(根据实现)行,并将其追加到底部。
基本上,所有模型的目标都是提供性能高效的获取。其主要思想是,视图在需要显示数据时,就会从其模型中请求更多的数据。如果您有1000个数据项,并且视图不能同时显示它们,则不需要全部1000个数据项。如果调试模型,您将看到QAbstractItemModel::data()函数是如何调用的,以及使用哪些参数:只提供了可见的模型索引。
发布于 2019-09-24 09:48:22
你想要的是分页/分页,不是吗?来自https://doc.qt.io/qt-5/qsqlquerymodel.html#details
QSqlQueryModel是一个用于执行SQL语句和遍历结果集的高级接口.它构建在较低级别的QSqlQuery之上,可用于提供数据以查看类(如QTableView )。
这里有一个在sqlite中分页的问题。在拥有数百万记录的SQLite中高效分页
https://stackoverflow.com/questions/58076440
复制相似问题