Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Nemo2000 от Март 07, 2011, 18:04



Название: Разные стили для разных строк в QTreeView
Отправлено: Nemo2000 от Март 07, 2011, 18:04
Имеется QTreeView.  Нужно парные его строки зарисовать в один цвет, а непарные в другой.
Стиль задаю с помощью setStyleSheet(). Примером может послужить стандартный PropertyEditor в Qt Creator. Там в строках чередуются зелёный и жёлтый цвета.
Собственно вся проблема :)


Название: Re: Разные стили для разных строк в QTreeView
Отправлено: JamS007 от Март 07, 2011, 19:05
QTreeView::alternatingRowColors : bool

Более просто этого не сделать. Если нужно 3 и более цвета - придеться работать с моделью.


Название: Re: Разные стили для разных строк в QTreeView
Отправлено: Nemo2000 от Март 09, 2011, 19:35
да,видимо,придётся с моделью посидеть..

Тогда ещё вопрос. Если задавать цвет для итема то заливается не вся строка, а только та часть где текст. Выходит некрасиво.
Можно дорисовать фон в методе paintEvent, но есть проблема с определением строки, в какой нужно рисовать. Есть ли какой-то хороший способ для этого?


Название: Re: Разные стили для разных строк в QTreeView
Отправлено: JamS007 от Март 09, 2011, 23:54
Цитировать
Если задавать цвет для итема то заливается не вся строка, а только та часть где текст.
Не знаю как ты задаешь цвет для item'a. Вообще, если не приходиться часто менять фон item'a то лучше присвоить ему фон прямо в модели, не играясь с делегатами, хотя, это - дело вкуса.

Я например делаю так:

Код
C++ (Qt)
QBrush backgroundColor(QColor(255,255,255,255)); //*
 
QStandardItem *item = myModel.item(row, column);
if (item){
   item->setData(backgroundColor, Qt::BackgroundRole); //*1
   item->setData(backgroundColor, Qt::ForegroundRole); //*2
}

* - Вместо 255 указывай нужные параметры цвета (красный, зеленый, синий, альфа-канал).
*1 - Цвет фона.
*2 - Цвет текста.


Название: Re: Разные стили для разных строк в QTreeView
Отправлено: Nemo2000 от Март 10, 2011, 00:04
Ну я возвращал нужные цвета с метода data() с модели. Закрашивало ступеньками так как для дочерних item'ов отступы есть. И эти отступы не закрашивались.
Проблему уже решил переопределив метод drawRow для QTreeView. :)


Название: Re: Разные стили для разных строк в QTreeView
Отправлено: fuCtor от Март 10, 2011, 07:34
А можно было ввсе в томже делегате, который делали для уборки отступов, сделать и закрашивание, чтобы собрать все в одном месте.