1) Класс QAbstractItemModel, как я понимаю, представляет собой самый общий интерфейс для модели, представляющей собой обертку над древовидной структурой данных. Есть корневой элемент данных, у корневого элемента есть потомки. Каждый из потомков является (или может являться) верхним левым элементом в некоей таблице элементов. Каждый из элементов в этой таблице сам может иметь потомков, и т. д. Так вот, я правильно понимаю, что модельный индекс QModelIndex - это некий объект, который ставится в соответствие каждому элементу данных в этой структуре и по которому можно этот элемент найти?
2) Лейтмотивом создания архитектуры MVC являлось отделение данных от способа их представления. Допустим, моё представление должно на основе данных в моей модели что-то нарисовать. Представление, я так понимаю, доступается до данных в модели через модельные индексы QModelIndex. Так вот, должно ли представление знать о способе организации данных в модели? Или смысл следующий: для одной модели мы можем создать несколько представлений, каждое из которых знает структуру данных в модели и отображает данные по-своему?
3) В чем суть делегатов? Должны ли они участвовать в отображении данных или только в обработке действий пользователя?
4) Допустим, в моей модели есть древовидная структура данных, в которой узлы дерева разных уровней представляются разными пользовательскими классами. Т. е. примерно так:
class E
{
private:
// Некоторые собственные данные класса
int m_e1;
double m_e2;
};
class D
{
private:
// Некоторые собственные данные класса
QVector<E> vectorE;
};
class C
{
private:
// Некоторые собственные данные класса
bool m_c1;
double m_c2;
double m_c3;
};
class B
{
private:
// Некоторые собственные данные класса
C m_b1;
int m_b2;
QVector<D> vectorD;
};
class A: public QAbstractItemModel
{
private:
QVector<B> vectorB;
};
Возвращать QModelIndex должен метод index() в классе A. Но как в этом методе организовать генерацию индексов для объектов классов B, C, D, E и содержащихся в них данных?