crossplatform.ru

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

> QVariant data() роли.
Ponchikus
  опции профиля:
сообщение 15.7.2015, 3:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 25.6.2015
Пользователь №: 4411

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




Репутация:   0  


Здравствуйте!!!

Начал потихоньку изучать модель/представление.

Появилось пару вопросов, прошу разъяснить мне простым языком некоторые моменты.
А именно.

Первое. Как вообще использовать роли ? Как они вызываются в приложении, для чего они вообще нужны и что с ними можно делать??

Второе. Функция QVariant data(const QModelIndex &index, int role) const; Когда она вызывается? Кто ее вызывает? Сама роль вызывает эту функцию?

Третье. В документации, есть описание -
Описание
Роли элемента
Роль указывает модели, данные какого типа будут переданы. Представления могут отображать роли различными способами, поэтому важно обеспечить информацию, соответствующую каждой роли.

Не могли бы вы пояснить ее более простыми словами, с примерами, если можно.

Помогите понять, что-то вообще не могу сообразить как все устроено...

СПАСИБО!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 15.7.2015, 17:43
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

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




Репутация:   8  


Цитата
Я правильно понимаю? Это так ??

Есть две точки зрения
1. С точки зрения представления - внешний интерфейс модели:
У нас есть модель, неважно где мы ее взяли:
QAbstractItemModel * mdl;

в которой три строки
mdl->rowCount(); // возвращает 3

в которой есть один столбец
mdl->columnCount(); // возвращает 1

получим индекс первой строки первого столбца
QModelIndex idx = mdl->index(0, 0); //нумерация с 0

получим данные для этого элемента
idx.data( Qt::DisplayRole ) или mdl->data( idx, Qt::DisplayRole ); //возвращает QVariant который можно преобразовать в строку "29" (или в число 29, обычно это неважно)
idx.data( Qt::ToolTipRole ) или mdl->data( idx, Qt::ToolTipRole ); //возвращает QVariant который можно преобразовать в строку "Это число!" (например)
idx.data( Qt::DecorationRole ) или mdl->data( idx, Qt::DecorationRole ); //возвращает невалидный QVariant :(

теперь напишем в нужной ячейке текст, который мы получили ("29")
если пользователь навел мышку в ячейку, покажем подсказку ("Это число!")
не будем рисовать иконку, модель ничего не вернула :(

2. Та же самая модель, вид изнутри
class MyModel : public QAbstractListModel {
// .. конструктор
// .. объявления методов
  QVector<int> list = { 29, 15, 5 };
}

int MyModel::rowCount( .. ) {
  return list.size();
}

int MyModel:: columnCount( .. ) {
  return 1;
}

QVariant MyModel::data( const QModelIndex & idx, Qt::ItemDataRole role ) {
  if( role == Qt::DisplayRole ) return list[ idx.row() ];
  if( role == Qt::ToolTipRole ) return "Это число!"; // Для всех элементов подсказка одинаковая

  return QVariant(); // Больше никаких данных ассоциированных с этим элементом (и нет картинки :( )
}


Сообщение отредактировал lanz - 15.7.2015, 17:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 1.12.2024, 2:08