Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Иволга от Июль 15, 2016, 13:18



Название: RubberBand для QGraphicsView
Отправлено: Иволга от Июль 15, 2016, 13:18
Добрый день!
Как изменить pen для rubberBand (это такая рамка для выделения мышью) в QGraphicsView?


Название: Re: RubberBand для QGraphicsView
Отправлено: GreatSnake от Июль 15, 2016, 17:03
Явно никак.
Можно непосредственно для QGraphicsView подобрать другой стиль либо
переопределить QProxyStyle::subControlRect() для CE_RubberBand и прописать свою отрисовку.
Либо самому рисовать RubberBand на QGraphicsView.


Название: Re: RubberBand для QGraphicsView
Отправлено: Иволга от Июль 18, 2016, 10:41
Цитировать
переопределить QProxyStyle::subControlRect() для CE_RubberBand и прописать свою отрисовку.
Сделала так:
Код:
class SE_Style : public QProxyStyle
{
public:
SE_Style() : QProxyStyle(){}

protected:
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const
{
switch(element)
{
case CE_RubberBand :
{
QPen pen (Qt::white);
pen.setWidthF(3.);
p->setPen(pen);
p->drawRect(opt->rect);
}
break;
default:
QProxyStyle::drawControl(element, opt, p, w);
}
}
};

В главном окне приложения:
Код:
    qApp->setStyle(new SE_Style);

Работает, но два замечания.
1. Почему-то pen.setWidth() и pen.setWidthF() эффекта не оказывают, всегда перо косметическое.
2. При выделении рамкой курсор мыши подтормаживает, до установки стиля этого не было.