Отображение QStandardItem с его цветом переднего плана в QTreeView, даже когда он выбран - PullRequest
1 голос
/ 08 сентября 2010

Использование Qt 4.6.3 в Linux / X11.

У меня есть виджет QTreeView, который использует QStandardItemModel в качестве модели, с 4 столбцами и сотнями строк. Большинство элементов в списке должны отображаться стандартным цветом, но некоторые должны быть другого цвета. Я могу легко изменить цвета этих нескольких элементов с помощью QStandardItem :: setForeground ().

Однако это влияет только на цвет элемента, когда он выбран , а не . Когда я выбираю цветной элемент, его цвет фона меняется на синий (что в порядке), а цвет текста меняется на белый (что не в порядке). Я попытался с помощью таблицы стилей повлиять на цвет переднего плана выбранных элементов (с селектором QTreeView :: item: selected), но это затронуло все элементов.

Я бы хотел, чтобы элементы, для которых я назвал item->setForeground(Qt::red), оставались красными, даже когда они выбраны, и другие элементы, чтобы использовать набор цветов по умолчанию (что они уже делают). Как это можно сделать?

1 Ответ

3 голосов
/ 10 сентября 2010

Используются цвета (я полагаю) для ролей QPalette Hightlight и HighlightedText. К сожалению, я не знаю ни одного способа установить их на отдельный стандартный элемент.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...