QT-пейджинг с использованием QSqlQueryModel - PullRequest
0 голосов
/ 24 сентября 2019

Я ищу решение по созданию подкачки с использованием 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 () для получения большего количества данных контролируемым образом.

Спасибо

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Если вы хотите узнать, как работает QSqlQueryModel, посмотрите на исходный код .Класс обрабатывает (должен обрабатывать) частичное извлечение из коробки, и вам не нужно реализовывать свой собственный механизм.
В основном, если представление должно отображать больше элементов из-за его прокрутки вниз, модель выбирает другой набор (255в соответствии с реализацией) строк и добавляет их в нижнюю часть.

В основном все модели предназначены для обеспечения эффективной выборки.Основная идея заключается в том, что представление запрашивает больше данных из своей модели, как только ему нужно ее показать.Если у вас есть 1000 элементов данных, и представление не может показать их сразу, ему не нужно все 1000. Если вы отладите свою модель, вы увидите, как вызывается функция QAbstractItemModel::data() и с какими аргументами: только видимые модельные индексыпри условии.

0 голосов
/ 24 сентября 2019

Что вам нужно, это нумерация страниц, не так ли?From https://doc.qt.io/qt-5/qsqlquerymodel.html#details

QSqlQueryModel - это высокоуровневый интерфейс для выполнения операторов SQL и обхода набора результатов.Он построен поверх низкоуровневого QSqlQuery и может использоваться для предоставления данных для просмотра классов, таких как QTableView

. Здесь есть вопросы с подкачкой в ​​sqlite. Эффективное разбиение на страницы в SQLite с миллионами записей

с sql https://docs.microsoft.com/en-us/previous-versions/sql/compact/sql-server-compact-4.0/gg699618(v=sql.110)?redirectedfrom=MSDN

...