как запросить у модели инф об элементе при переопределении метода data модели |
Здравствуйте, гость ( Вход | Регистрация )
как запросить у модели инф об элементе при переопределении метода data модели |
Steklova Olga |
3.4.2012, 19:04
Сообщение
#1
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Привет!
В моей модели переопределены две роли элементов. При переопределении одной роли элемента модели мне надо использовать информацию о другой роли этого элемента. А именно, для одной из колонок модели цвет текста элемента модели должен быть красным, если значение соотв. поля в соотв. записи таблицы БД равно 1. К тому же, отображение значения этого поля тоже должно быть переопределено (если значение соотв. поля в соотв. записи таблицы БД равно 1, то вместо 1 надо отобразить ВАЖНЫЙ, иначе надо отобразить ОБЫЧНЫЙ). В справке сказано , что мы можем запросить у модели информацию об элементе, передав ей модельный индекс, соответствующий элементу, и задав роль для получения данных желаемого типа: QVariant value = model->data(index, role); Но мне нужно сделать это при переопределении метода data модели. Вот мой код:
А вот что я не понимаю: 1. Метод data, который я переопределяю, вызывается для каждой из ролей, которые вообще существуют для модели? 2. Порядок вызова метода data для ролей одного и того же элемента модели - непредсказуем? 3. При переопределении метода data можно писать: но можно ли писать так: или так (что то же самое): 4. Можно ли при переопределении роли Qt::ForegroundRole проверять равенство (valueForDisplayRole.toInt() == 1) ?Совсем глупый вопрос: на это не влияет то, что при переопределении роли case Qt::DisplayRole я заменила отображение 1 на "ВАЖНЫЙ"? Спасибо за внимание |
|
|
Litkevich Yuriy |
3.4.2012, 19:51
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Метод data, который я переопределяю, вызывается для каждой из ролей, которые вообще существуют для модели? существует только один метод data, один из аргументов которого - роль.этот метод вызывается для роли, которая интересует вызывающего (объекта). Если этим объектом является представление, то: 1) для отображения данных представление вызывает соответствующий метод делегата, а тот в свою очередь Модель::data (..., Qt::DisplayRole) 2) для отображения данных при редактировании элемента представление вызывает соответствующий метод делегата, а тот в свою очередь Модель::data (..., Qt::EditRole) 3) если указатель мыши зависнет над элементом (делегатом) на некоторое время, то представление вызывает Модель::data (..., Qt::ToolTipRole). 2. Порядок вызова метода data для ролей одного и того же элемента модели - непредсказуем? мой ответ выше должен ответить тебе и на этот вопрос.3. При переопределении метода data что именно смущает?... но можно ли писать так: 4. Можно ли при переопределении роли Qt::ForegroundRole проверять равенство (valueForDisplayRole.toInt() == 1) ? Если valueForDisplayRole действительно всегда будет ЦЕЛОЕ, тогда можно.Совсем глупый вопрос: на это не влияет то, что при переопределении роли case Qt::DisplayRole я заменила отображение 1 на "ВАЖНЫЙ"? нет, не влияет. Т.к. "1" возвращает метод data базового класса ( value = QSqlRelationalTableModel::data(index, role); ) ипроверку условия ты делаешь с данными, которые возвращает тот же метод ( valueForDisplayRole = QSqlRelationalTableModel::data(index, Qt::DisplayRole) ), а не метод твоего класса - MyModel_msg_list::data (который возвращает уже строку). П.С. так: return value.toInt() == 1 ? "ВАЖНЫЙ" : "ОБЫЧНЫЙ"; // Где value - QVariant лучше не делать, т.к. это строка из char-ов. Лучше сразу привести к QString, например:
П.П.С. Запись на русском явно вызовет проблему в будущем, приводи все русскоязычные литералы к QString с корректным преобразованием кодировки. Впринципе дурацкий, но быстрый способ: файл с исходником в кодировке UTF-8, тогда код выглядит так: Лучше использовать QTextCodecЕсли кодировка исходника в UTF8 и не нужно, чтобы литералы попадали в перевод, можно использовать другую готовую функцию: QString::fromUtf8(...) |
|
|
Текстовая версия | Сейчас: 23.11.2024, 6:22 |