Russian Qt Forum
Июня 18, 2025, 14:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать собственный виджет, поддерживающий стили (styleSheet)  (Прочитано 4081 раз)
marbius
Гость
« : Ноября 16, 2010, 20:04 »

Доброго времени суток.

До сих пор наследовал от QWidget с переопределенным paintEvent и не шибко задумываясь ставил разного рода QPainter::setBrush и QPainter::setPen с собственными значениями стилей и цветов. Подумал создать виджет, поддерживающий стили (QWidget::setStyleSheet), смотрел реализации в Qt, но, увы... Может кто разбирался и сможет подсказать, как это можно реализовать? Минимум - как добраться до цветов, задаваемых styleSheet'ом?

Благодарен.
Записан
ltise
Гость
« Ответ #1 : Ноября 16, 2010, 20:36 »

А что именно интерисует ?

Ты можешь в стиле задать конкретный стиль для своего виджета:

QWidget#MyWidget{
}

...
widget->setObjectName("MyWidget");

до цветов можно добраться через палитру:

widget->palette().background() и т.п.

или инициализировать паинтер:

painter->initFrom(someWidget);
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Ноября 16, 2010, 22:04 »

Видимо как-то так (http://doc.qt.nokia.com/4.7/qstyle.html#developing-style-aware-custom-widgets)
Код
C++ (Qt)
void MyWidget::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
 
    QStyleOptionFocusRect option;
    option.initFrom(this);
    option.backgroundColor = palette().color(QPalette::Background);
 
    style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
}
 
Записан
Marat(Qt)
Гость
« Ответ #3 : Ноября 16, 2010, 22:14 »

Видимо как-то так (http://doc.qt.nokia.com/4.7/qstyle.html#developing-style-aware-custom-widgets)
Код
C++ (Qt)
void MyWidget::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
 
    QStyleOptionFocusRect option;
    option.initFrom(this);
    option.backgroundColor = palette().color(QPalette::Background);
 
    style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
}
 

Там вроде QStylePainter вместо QPainter используется.

2ts
option'ы дают возможность отрисовывать примитивы в заданном состоянии(hover, с фокусом, активный/не активный...)
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Ноября 17, 2010, 21:53 »

Там вроде QStylePainter вместо QPainter используется.
Где?
...
Код
C++ (Qt)
    QPainter painter(this);
 
...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.