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

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

Я пытаюсь реализовать модель для моего 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 Ответ

1 голос
/ 24 мая 2011

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

...