2014-10-02 6 views
0

Я разрабатываю приложение Qt на C++. Приложение сосредотачивается вокруг виджета дерева, который имеет поддерево для каждого объекта в системе. Объекты имеют «подсветку» цветов, которые могут быть указаны пользователем и выделять события, связанные с определенным объектом. Цвет фона элемента корневого дерева Entity - это цвет выделения для Entity. Когда происходит событие, связанное с Entity, я хотел бы сделать фоновый цвет идентификатора, сопоставленного с Entity, таким же, как цвет выделения Entity. Вот грубый макет того, что я пытаюсь сделать, с псевдо-HTML-теги с указанием цвета и где я хочу их:Как изменить цвет фона или текста для части QTreeWidgetItem

<bgcolor=blue>Entity A</bgcolor> 
    Events 
     Identifier1 and <bgcolor=blue>Identifier2</bgcolor> 
     <bgcolor=blue>Identifier2</bgcolor> @ 10:45:22 
     <bgcolor=blue>Identifier3</bgcolor> and Identifier4 

Как я понимаю, это не непосредственно возможно с QTreeWidgetItem. Я знаю, что я могу предоставить делегат для элемента дерева для обработки пользовательской графики, но я не разбираюсь в QStyle-части Qt. Наши клиенты будут использовать это приложение на XP и Win7 и могут иметь или не включать WindowsClassic. Таким образом, обработка всех возможностей QStyle может стать очень сложной. Есть ли ярлык, с помощью которого я могу заставить QStyle нарисовать части текста, которые я хочу, с цветами фона, которые я хочу, без необходимости обрабатывать каждый потенциальный фрагмент потребностей чертежного элемента дерева?

+0

таблицы стилей? http://stackoverflow.com/a/26128914/2266412 –

+1

В основном вам нужно отображать HTML в представлениях Qt. Это можно сделать, создав делегат пользовательского элемента. См. [Этот вопрос] (http://stackoverflow.com/questions/1956542/how-to-make-item-view-render-rich-html-text-in-qt). –

+0

@PavelStrakhov, спасибо! Я не хорошо разбираюсь в HTML, но, наконец, нашел тег и сделал этот трюк для меня вместе со связанным вопросом. Если вы представите его в качестве ответа, я соглашусь с ним. – iamtheddrman

ответ

1

В принципе, вам нужно отображать HTML в представлениях Qt. Это можно сделать, создав делегат пользовательского элемента. См. this question.

Настройка цвета с HTML:

text1 <span style="color: #ff0000">red text</span> text2 
+0

Это сделало трюк, но мне все равно пришлось иметь дело с стилями Qt, так как я сейчас рисую элемент дерева самостоятельно. Как только я разобрался с основами рисования, я смог получить и остальную часть стиля. Мои коллеги очень впечатлены результатами, поэтому спасибо! – iamtheddrman