crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как сохранить отрисовку стиля item в QStyledItemDelegate::paint
r485_post
  опции профиля:
сообщение 15.11.2010, 23:20
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 970

Спасибо сказали: 0 раз(а)




Репутация:   0  


Допустим в переопределении функции QStyledItemDelegate::paint имеется следующий код:

   QStyleOptionViewItemV4 opt (option); 
    opt.text = "...";
    opt.icon = QIcon("...");
    opt.features |= QStyleOptionViewItemV2::HasDecoration;

    QApplication::style ()->drawControl(QStyle::CE_ItemViewItem, &opt, painter );


QStyleOptionViewItemV4 позволяет нам по сравнению со своими предшественниками (QStyleOptionViewItem, QStyleOptionViewItemV1, QStyleOptionViewItemV2, QStyleOptionViewItemV3) задать иконку, текст и ещё кое-что стандартным способом без ручной отсисовки. Иконку, текст и всё, что там ещё можно мы изменим, но стиль итема, который я задал вот так ListView->setStyleSheet ( "QListView:item { backgrond: red; }"); исчезнет. Будет стиль, заданный по умолчанию + наши иконка, текст и т.д. Я для примера привел простой backgrond. Простой backgrond можно задать и через кисть, но у меня в программе сложный градиент + бордер + другой градиент для состояния selected. Вообщем мне нужно сохранить стиль, так как воспроизводить его руками через painter это фу как не красиво.

Кто с таким сталкивался ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.11.2010, 23:33
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Попробуй передавать в drawContorl указатель на виджет для которого установлен qss-стиль.
QApplication::style ()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, ListView );


Без указания виджета drawControl не обращает внимание на qss. Почему... вопрос.
Вот подобное обсуждение: http://www.prog.org.ru/topic_12423_0.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.11.2010, 0:09
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


если мне не изменяет мой маразм, то Каскадные таблицы стилей не совместимы с программными стилями.
Т.е. либо то, либо другое
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
r485_post
  опции профиля:
сообщение 16.11.2010, 23:16
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 970

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 16.11.2010, 0:33) *
Попробуй передавать в drawContorl указатель на виджет для которого установлен qss-стиль.
QApplication::style ()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, ListView );

Ура! Заработало!!! Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.11.2024, 20:08