Введение в разработку приложений на платформе Atom/MeeGo для нетбуков и планшетников. Граничин О.Н - 127 стр.

UptoLike

127
Класс с описанием данных наследуется от QAbstractListModel, в
нем достаточно переопределить функцию rowCount(), которая
возвращает количество строк в списке, и собственно функцию для
данных:
QVariant ListModel::data(const QModelIndex &index,
int role) const {
if (role == Qt::DisplayRole) {
QStringList rowData;
rowData << QString("Row %1").arg(index.row());
rowData << "some details";
return QVariant(rowData);
}
return QVariant();
}
Отметим, что для передачи данных используется QVariantтип-
контейнер, в который можно «положить» значения разных типов. В
данном случае используется QStringList, но можно использовать и
свою структуру данныхглавное, чтобы это было согласовано с
классом-визуализатором.
Визуализатор ячеек унаследован от класса
MAbstractCellCreator<MContentItem>. Обратите внимание на
нетипичное для Qt использование шаблонаэтот класс не является
наследником QObject! MContentItemспециальный виджет,
предназначенный для отображения отдельной ячейки списка,
именно он занимается отрисовкой упомянутых выше двух строк и
картинки. При более глубокой работе со списком программист
может заменить этот класс на свой собственный, более
продвинутый. В простейшем же случае достаточно переопределить
одну фунцию в MAbstractCellCreator<MContentItem>:
void CellCreator::updateCell(const QModelIndex&
index, MWidget *cell) const
{
MContentItem *contentItem =
qobject_cast<MContentItem *>(cell);
QVariant data = index.data(Qt::DisplayRole);
QStringList rowData = data.value<QStringList>();