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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Слайдер с двумя ползунками и стилями  (Прочитано 4093 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Ноябрь 04, 2016, 16:58 »

Всем привет.

Нужен некий новый виджет - слайдер с двумя "ручками", с поддержкой стилей
(знаю, что есть что-то подобное в libqxt, называется SpanSlider, но суть не в этом).

Сам виджет наследую от QSlider, а ручки рисую так:

Код
C++ (Qt)
MySlider::MySlider(QWidget *parent)
   : QSlider(Qt::Horizontal, parent)
{
}
 
void MySlider::paintEvent(QPaintEvent *ev)
{
   Q_UNUSED(ev);
   QPainter p(this);
 
   QStyleOptionSlider opt;
   initStyleOption(&opt);
 
   // Рисуем левую ручку.
   opt.sliderPosition = 0;
   opt.subControls = QStyle::SC_SliderHandle;
   style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
   // Рисуем правую ручку.
   opt.sliderPosition = 50;
   opt.subControls = QStyle::SC_SliderHandle;
   style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
}
 

Вроде все отрисовывается как надо.. НО.. как только устанавливаю фон виджету из
стилей:

Код
C++ (Qt)
app.setStyleSheet("MySlider { background-color: yellow; }");
 

... то отрисовывается только последняя ручка... ччерт..  Злой как быть?

PS: См. картинки в аттаче.
« Последнее редактирование: Ноябрь 04, 2016, 17:02 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Ноябрь 04, 2016, 17:39 »

Хм.. кажется так работает:

Код
C++ (Qt)
void MySlider::paintEvent(QPaintEvent *ev)
{
   Q_UNUSED(ev);
   QPainter p(this);
 
   QStyleOptionSlider opt;
 
   // Рисуем левую ручку.
   initStyleOption(&opt);
   opt.sliderPosition = 0;
   opt.subControls = QStyle::SC_SliderHandle;
   opt.rect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
   style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
 
   // Рисуем правую ручку.
   initStyleOption(&opt);
   opt.sliderPosition = 50;
   opt.subControls = QStyle::SC_SliderHandle;
   opt.rect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
   style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
}
 
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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