Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: trot от Январь 15, 2011, 13:16



Название: Как изменить цвет текста одного итема в дереве
Отправлено: trot от Январь 15, 2011, 13:16
Необходимо, в зависимости от какого-то условия, в дереве отображать тексты итемов разными цветами.
Один из вариантов сделать это через делегата переопределив метод paint. Но тут возникает проблема. Устанавливаю цвет пера (QPen) и вызываю базовый метод передав туда painter с новым цветом пера. И в итоге как отображался текст черным, так и отображается, т.е. никаких изменений. Прошелся по коду базового метода и обнаружил, что внутри метода цвет пера устанавливается свой, а не тот который мне нужен. Получается так, что используя базовый метод, нельзя получить желаемого эффекта. Переписать полностью метод paint, ради того чтобы поменять только цвет шрифта, считаю уж слишком затратным.
Подскажите может это все как-то проще решается.


Название: Re: Как изменить цвет текста одного итема в дереве
Отправлено: shirushizo от Январь 15, 2011, 13:49
По идее должно сработать:
Код:
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  //проверяем index
  QPallete customPallete;
  //... выставляем что надо
  option.pallete=customPallete;
  QItemDelegate::paint(painter, option, index);
}

А вообще можно в методе data возвращать нужный цвет по Qt::ForegroundRole   или Qt::TextColorRole, скорее всего в виде
qVariantFromValue(QColor(Qt::Green))


Название: Re: Как изменить цвет текста одного итема в дереве
Отправлено: trot от Январь 15, 2011, 14:13
Этот вариант тоже рассматривался, но QStyleOptionViewItem &option задан как const и соответственно изменить объект option нельзя.


Название: Re: Как изменить цвет текста одного итема в дереве
Отправлено: shirushizo от Январь 16, 2011, 10:23
Каюсь не заметил, но никто не запрещает сделать копию, изменить ее и передать в метод родителя ;)