Russian Qt Forum
Ноябрь 05, 2024, 22:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: RubberBand для QGraphicsView  (Прочитано 2555 раз)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« : Июль 15, 2016, 13:18 »

Добрый день!
Как изменить pen для rubberBand (это такая рамка для выделения мышью) в QGraphicsView?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июль 15, 2016, 17:03 »

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

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #2 : Июль 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. При выделении рамкой курсор мыши подтормаживает, до установки стиля этого не было.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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