crossplatform.ru

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

> как запросить у модели инф об элементе при переопределении метода data модели
Steklova Olga
  опции профиля:
сообщение 3.4.2012, 19:04
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Привет! :wink2:
В моей модели переопределены две роли элементов. При переопределении одной роли элемента модели мне надо использовать информацию о другой роли этого элемента.
А именно, для одной из колонок модели цвет текста элемента модели должен быть красным, если значение соотв. поля в соотв. записи таблицы БД равно 1.
К тому же, отображение значения этого поля тоже должно быть переопределено (если значение соотв. поля в соотв. записи таблицы БД равно 1, то вместо 1 надо отобразить ВАЖНЫЙ, иначе надо отобразить ОБЫЧНЫЙ).

В справке сказано B), что мы можем запросить у модели информацию об элементе,
передав ей модельный индекс, соответствующий элементу,
и задав роль для получения данных желаемого типа:
QVariant value = model->data(index, role);

Но мне нужно сделать это при переопределении метода data модели.

Вот мой код:
MyModel_msg_list::MyModel_msg_list(QObject *parent) :
    QSqlRelationalTableModel(parent)
{
}

QVariant MyModel_msg_list::data(
        const QModelIndex &index,
        int role) const {

    QVariant value = QSqlRelationalTableModel::data(index, role);

    //можно тут так сделать?
    QVariant valueForDisplayRole = QSqlRelationalTableModel::data(index, Qt::DisplayRole); //?
    //или так? (что то же самое)
    //QVariant valueForDisplayRole = QSqlRelationalTableModel::data(index); //?

    switch (role) {

    case Qt::DisplayRole:
        if (index.column() == T_MSG_ColNmb_MSG_PRIOR_CODE)
            return value.toInt() == 1 ? "ВАЖНЫЙ" : "ОБЫЧНЫЙ";
        return value;

    case Qt::ForegroundRole:
        if ((index.column() == T_MSG_ColNmb_MSG_PRIOR_CODE) &&

            //можно тут так сделать?
            (valueForDisplayRole.toInt() == 1)) //"ВАЖНЫЙ"

            return qVariantFromValue(QColor(Qt::red));
        return value;

    } //switch (role)

    return value;
}

А вот что я не понимаю: :unknown:
1. Метод data, который я переопределяю, вызывается для каждой из ролей, которые вообще существуют для модели?
2. Порядок вызова метода data для ролей одного и того же элемента модели - непредсказуем?
3. При переопределении метода data
можно писать:
QVariant value = QSqlRelationalTableModel::data(index, role);
но можно ли писать так:
QVariant valueForDisplayRole = QSqlRelationalTableModel::data(index, Qt::DisplayRole); //?
или так (что то же самое):
QVariant valueForDisplayRole = QSqlRelationalTableModel::data(index); //?
4. Можно ли при переопределении роли Qt::ForegroundRole проверять равенство (valueForDisplayRole.toInt() == 1) ?
Совсем глупый вопрос: на это не влияет то, что при переопределении роли case Qt::DisplayRole я заменила отображение 1 на "ВАЖНЫЙ"?

Спасибо за внимание :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 17.2.2025, 4:40