Используйте реализацию QAbstractTableModel с QList пользовательских классов

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

2

Решение

Это подход к решению этой проблемы или есть лучший?

Конечно, правильный подход, да. Для этого даже нет функции самоанализа QMetaObject.

Если бы в моем классе было 50 учеников, было бы много работы. То же самое нужно сделать, когда я записываю данные в источник через QAbstractTableModel :: setData ().

Что ж, очень маловероятно, что вы когда-нибудь получите 50 разных участников, но в этом случае управление вашим классом будет в любом случае сложным.

Ответы или ссылки на материалы, которые помогут мне понять эту часть реализации модели / представления в Qt, очень ценятся.

Здесь не так много ссылок. Смотрите выше для деталей.

0

Другие решения

Я думаю, что нашел ответ на свою проблему. Не совсем уверен, как все это будет работать в деталях, но я думаю, что это путь ().

[…] Хотя методы модели работают с элементами, используя концепцию индекса элемента, иногда невозможно или неудобно точно определить представление элемента, просто используя номера строк и столбцов и индекс родительского элемента. К счастью, индекс несет больше, чем это. Указатель (void *) или дополнительный номер (int) могут быть связаны с индексом, который может указывать на внутреннее представление данных элемента (либо указатель на структуру данных, либо индекс элемента в массиве map). или что-то похожее). Благодаря этому механизму методы могут иметь прямой доступ к структурам данных, представляющим элементы.

от http://www.qtcentre.org/wiki/index.php?title=QAbstractItemModel#Implementing_custom_models

0

По вопросам рекламы [email protected]