crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Архитектура Модель-Представление, Особенности реализации архитектуры MVC в Qt
vo.borodin
  опции профиля:
сообщение 31.3.2014, 8:14
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 26.3.2014
Пользователь №: 4088

Спасибо сказали: 0 раз(а)




Репутация:   0  


В последнее время отошел от C++, но сейчас хочу возвратить навыки по нему. Реализация архитектуры Модель-Представление в Qt - тема интересная и сложная, хочу в ней разобраться. Есть много непонятных моментов и фундаментальных вопросов. Обо всём по порядку:
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 и содержащихся в них данных?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.9.2024, 1:30