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, а затем вы можете использовать родительский индекс, переданный различным функциям, для создания новых запросов к данным.,