QTreeView и QSqlQueryModel - загрузка дочерних элементов по мере необходимости из базы данных SQL

У меня есть следующая проблема.

Я пытаюсь реализовать модель для моего QTreeView, которая будет динамически загружать данные из таблицы SQL.

Таблица выглядит так:

CREATE TABLE xcmObjects
(
   id                       INT               AUTO_INCREMENT PRIMARY KEY NOT NULL,
   id_parent                INT               DEFAULT 0 NOT NULL ,
   title                    TEXT

);

id_parent содержит идентификатор родительской записи - поэтому они образуют структуру.

Я бы хотел, чтобы моя модель загружала данные из этой таблицы только при необходимости. Другими словами, я не хочу загружать всю структуру в память, вместо этого я не хочу читать дочерние элементы только тех узлов, которые были открыты пользователем.

QSqlQueryModel и QSqlTableModel, кажется, работают только для плоских таблиц.

Я думаю, что одним из решений этой проблемы было бы реализовать пользовательский класс QAbastractItemModel и внутри хранилища отдельные экземпляры QSqlQueryModel для каждого открытого узла (включая невидимого родителя верхнего уровня). А затем переписать каждый метод и направить запросы в соответствующие модели.

Может быть, есть более простое решение?:-)

Спасибо за помощь.

1 ответ

Решение

Я не думаю, что было бы слишком сложно работать через подкласс QAbstractItemModel, чтобы сделать это. Вашим верхним уровнем будут все элементы в таблице, где parent_id равен 0. Сохраните идентификатор каждого элемента в качестве внутренних данных для классов QModelIndex, а затем вы можете использовать родительский индекс, переданный различным функциям, для создания новых запросов к данным.,

Другие вопросы по тегам