
Вот упрощенная версия того, что я Я пытаюсь достичь. Для каждого добавляемого магазина можно добавить один или несколько отделов. Для каждого добавляемого отдела можно добавить одного или нескольких сотрудников. Выбор строки в списке обновит списки справа от нее. Например, выбор «Улицы Сезам» обновит список отделов, чтобы отобразить все отделы, принадлежащие этому магазину. При выборе одежды список сотрудников будет обновлен, и в нем будут показаны все сотрудники, принадлежащие к этому отделу.
Эта связь также продемонстрирована ниже (обратите внимание, что на самом деле это будут классы, способные излучать сигналы при их данные изменяются внутренне, например, из внешних источников):
Код: Выделить всё
struct Employee {
std::string id;
std::string name;
double hourly_rate;
};
struct Department {
std::string id;
std::string name;
int personCount;
bool status;
Employee* onShift;
std::vector employees;
};
struct Store {
std::string id;
std::string name;
std::string address;
std::vector departments;
};

Что касается моделей Qt, я представьте себе, что есть несколько способов подойти к этому. Я предпочитаю думать о моделях Qt только как о интерфейсе между представлением и данными, а не как о самих себе, несущих ответственность за указанные данные или владеющих ими.
Я предлагаю передать право собственности на наши данные класс Manager, который также содержит все создаваемые нами модели-подклассы. На странице конфигурации у нас есть три подкласса QAbstractListModel для магазинов, отделов и сотрудников. Для моделей «Отделы» и «Сотрудники» мы можем передать указатель списка и вызвать Begin/endResetModel по мере необходимости для обновления списков при выборе элементов.
Для страницы «Все отделы» у нас естьагрегатDepartments модель также является подклассом QAbstractListModel. Он будет содержать список указателей для всех отделов магазинов. Раскрывающийся список «Руководитель смены» немного сложнее, поскольку мы не можем использовать одну модель. В этом случае мне интересно, имеет ли смысл для Департамента иметь собственный экземпляр списка сотрудников, который он может вернуть делегату QML...
Как вы можете видеть , теперь у нас есть множество моделей довольно простой иерархии данных. Синхронизация между моделями может стать проблемой, поэтому базовые данные следует изменять только через класс Manager, который затем может организовать обновление моделей.
Описал ли я достойный подход к проблеме? или я создал запутанный беспорядок? Я не могу придумать лучшего способа
Подробнее здесь: https://stackoverflow.com/questions/793 ... structures
Мобильная версия