В моей модели переопределены две роли элементов. При переопределении одной роли элемента модели мне надо использовать информацию о другой роли этого элемента.
А именно, для одной из колонок модели цвет текста элемента модели должен быть красным, если значение соотв. поля в соотв. записи таблицы БД равно 1.
К тому же, отображение значения этого поля тоже должно быть переопределено (если значение соотв. поля в соотв. записи таблицы БД равно 1, то вместо 1 надо отобразить ВАЖНЫЙ, иначе надо отобразить ОБЫЧНЫЙ).
В справке сказано , что мы можем запросить у модели информацию об элементе,
передав ей модельный индекс, соответствующий элементу,
и задав роль для получения данных желаемого типа:
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;
}
А вот что я не понимаю:
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 на "ВАЖНЫЙ"?
Спасибо за внимание