Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: marbius от Ноября 16, 2010, 20:04



Название: Как создать собственный виджет, поддерживающий стили (styleSheet)
Отправлено: marbius от Ноября 16, 2010, 20:04
Доброго времени суток.

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

Благодарен.


Название: Re: Как создать собственный виджет, поддерживающий стили (styleSheet)
Отправлено: ltise от Ноября 16, 2010, 20:36
А что именно интерисует ?

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

QWidget#MyWidget{
}

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

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

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

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

painter->initFrom(someWidget);


Название: Re: Как создать собственный виджет, поддерживающий стили (styleSheet)
Отправлено: xokc от Ноября 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);
}
 


Название: Re: Как создать собственный виджет, поддерживающий стили (styleSheet)
Отправлено: Marat(Qt) от Ноября 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, с фокусом, активный/не активный...)


Название: Re: Как создать собственный виджет, поддерживающий стили (styleSheet)
Отправлено: xokc от Ноября 17, 2010, 21:53
Там вроде QStylePainter вместо QPainter используется.
Где?
...
Код
C++ (Qt)
    QPainter painter(this);
 
...