У меня есть общий вопрос о реализации основного источника данных QAbstractTableModel
,
QAbstractTableModel::data()
Функция доступа к содержимому источников данных по индексу, состоящему из строки и значения столбца.
Если мой источник данных является QList
из Person
классы, где каждый член представляет столбец, как я могу получить доступ к его членам с данным индексом столбца?
Единственный подход, который я могу придумать, заключается в том, что я использую своего рода отображение, которое сопоставляет номер столбца с членом Person
учебный класс:
QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
Person person = mySource[index.row()];
if (index.column() == 0)
return person.getName();
else if (index.column() == 1)
return person.getAdress();
(...and so on..)
}
return QVariant();
}
Это подход к решению этой проблемы или есть лучший? Если бы в моем классе было 50 учеников, было бы много работы. То же самое нужно сделать, когда я записываю данные в источник через QAbstractTableModel::setData()
,
Ответы или ссылки на материалы, которые помогут мне понять эту часть реализации модели / представления в Qt, очень ценятся.
Это подход к решению этой проблемы или есть лучший?
Конечно, правильный подход, да. Для этого даже нет функции самоанализа QMetaObject.
Если бы в моем классе было 50 учеников, было бы много работы. То же самое нужно сделать, когда я записываю данные в источник через QAbstractTableModel :: setData ().
Что ж, очень маловероятно, что вы когда-нибудь получите 50 разных участников, но в этом случае управление вашим классом будет в любом случае сложным.
Ответы или ссылки на материалы, которые помогут мне понять эту часть реализации модели / представления в Qt, очень ценятся.
Здесь не так много ссылок. Смотрите выше для деталей.
Я думаю, что нашел ответ на свою проблему. Не совсем уверен, как все это будет работать в деталях, но я думаю, что это путь ().
[…] Хотя методы модели работают с элементами, используя концепцию индекса элемента, иногда невозможно или неудобно точно определить представление элемента, просто используя номера строк и столбцов и индекс родительского элемента. К счастью, индекс несет больше, чем это. Указатель (void *) или дополнительный номер (int) могут быть связаны с индексом, который может указывать на внутреннее представление данных элемента (либо указатель на структуру данных, либо индекс элемента в массиве map). или что-то похожее). Благодаря этому механизму методы могут иметь прямой доступ к структурам данных, представляющим элементы.
от http://www.qtcentre.org/wiki/index.php?title=QAbstractItemModel#Implementing_custom_models