Russian Qt Forum

Qt => QSS => Тема начата: andrew.k от Апрель 16, 2012, 20:13



Название: drawControl + QStyle
Отправлено: andrew.k от Апрель 16, 2012, 20:13
Делаю делегат для вьюхи.
Мне нужно отрисовать кнопку. Но отрисовать ее нужно текущим стилем.
Что-то не выходит.

Вот код, рисующий кнопку.
Код
C++ (Qt)
   // Draw remove button
   QRect buttonRect = getButtonRect(rect);
   QStyleOptionButton button;
   button.initFrom(widget);
   button.rect = buttonRect;
   button.text = "X";
   button.state = removeButtonState_ | QStyle::State_Enabled;
   style->drawControl(QStyle::CE_PushButton, &button, painter);

Не пойму, как корректно заполучить QStyleOptionButton.

Ведь внутри метода paint(QPainter *painter, const QStyleOptionViewItem &option,...
имеем QStyleOptionViewItem

Кнопка рисуется без стиля.


Название: Re: drawControl + QStyle
Отправлено: GreatSnake от Апрель 16, 2012, 20:25
Похоже, что не получится, т.к. для QSS требуется наличие QPushButton виджета.
Вот здесь (http://www.prog.org.ru/topic_12423_0.html) аналогичная проблема.

Но можно попробовать создать "спрятанный" QPushButton и отрисовывать его через QWidget::render().


Название: Re: drawControl + QStyle
Отправлено: andrew.k от Апрель 16, 2012, 21:40
Но можно попробовать создать "спрятанный" QPushButton и отрисовывать его через QWidget::render().
Да, уже пришла такая мысль, как попробую, отпишу.


Название: Re: drawControl + QStyle
Отправлено: andrew.k от Апрель 17, 2012, 20:14
Спрятанный виджет вроде как не сработал.
Но отрисовать кнопку мне удалось.
Правда не удалось повторить ситуацию в отдельном тестовом проекте  ???


Название: Re: drawControl + QStyle
Отправлено: andrew.k от Апрель 17, 2012, 20:16
Второй непонятный мне глюк.

Код
C++ (Qt)
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
                      const QModelIndex &index) const;
и
virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
                            const QModelIndex &index);
В этих обработчиках получаю разный размер option.rect?
Почему так???