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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSlider. координата ползунка(не самого виджета)  (Прочитано 8192 раз)
andrewshkovskii
Гость
« : Октябрь 13, 2009, 15:43 »

Что нужно : получить координаты ползунка у слайдера.
Зачем : для того, что бы реализовать вот это

т.е рисовать линию на QGraphicView прямо под ползунком.
Необходимо учесть, что максимальное значение слайдера(maximum()) может меняться во время выполнения программы.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #1 : Октябрь 13, 2009, 16:06 »

может QPaintDevice чем поможет, но врядли... имхо лучше написать свой контрол-линейку
Записан
alexman
Гость
« Ответ #2 : Октябрь 13, 2009, 16:09 »

Примерно так: устанавливаешь минимальное значение слайдера в 0, а максимальное значение при resize в ширину виджета; далее при изменении положения слайдера value() есть координата по оси OX.
Записан
andrewshkovskii
Гость
« Ответ #3 : Октябрь 13, 2009, 16:13 »

Примерно так: устанавливаешь минимальное значение слайдера в 0, а максимальное значение при resize в ширину виджета; далее при изменении положения слайдера value() есть координата по оси OX.
Максимальное значение зависит от других параметров, и вычисляется на основе входных данных.
(это программа кластерного анализа по алгоритму Прима(мин. остовное дерево)), вот и в зависимости от макс. значения в остовном дереве и устанавливается макс.значение слайдера..
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #4 : Октябрь 13, 2009, 16:20 »

2 alex, центр ползунка не совпадает с краем полоски ползунка...
Записан
alexman
Гость
« Ответ #5 : Октябрь 13, 2009, 16:25 »

2 alex, центр ползунка не совпадает с краем полоски ползунка...

+- константа
Записан
alexman
Гость
« Ответ #6 : Октябрь 13, 2009, 16:26 »

Примерно так: устанавливаешь минимальное значение слайдера в 0, а максимальное значение при resize в ширину виджета; далее при изменении положения слайдера value() есть координата по оси OX.
Максимальное значение зависит от других параметров, и вычисляется на основе входных данных.
(это программа кластерного анализа по алгоритму Прима(мин. остовное дерево)), вот и в зависимости от макс. значения в остовном дереве и устанавливается макс.значение слайдера..

Тогда лучше реализуй свой виджет.
Записан
baka
Гость
« Ответ #7 : Октябрь 13, 2009, 17:10 »

Возможно начальную позицию слайдера(при которой он нулевой) в пикселях удастся узнать с помощью QStyleOptionSlider через стили. т.к. под разными платформами отступ первой позиции слайдера от края разный.
Записан
SLiDER
Гость
« Ответ #8 : Октябрь 13, 2009, 23:46 »

2 alex, центр ползунка не совпадает с краем полоски ползунка...

+- константа

При работе с Qt никогда, повторяю, никогда не забывайте про стили, Вы никогда не можете гарантированно знать значение этой самой константы !!!
Записан
Kolobok
Гость
« Ответ #9 : Октябрь 13, 2009, 23:58 »

Цитировать
int QStyle::sliderPositionFromValue ( int min, int max, int logicalValue, int span, bool upsideDown = false )   [static]
Записан
andrewshkovskii
Гость
« Ответ #10 : Октябрь 14, 2009, 00:17 »

Эм..извините за глупость, но что за параметр Span, в этом методе?
Записан
Kolobok
Гость
« Ответ #11 : Октябрь 14, 2009, 00:33 »

Я думаю, это длина канавки в пикселях. Вычисляется примерно так:
Код
C++ (Qt)
QStyleOptionSlider opt;
initStyleOption(&opt);
QRect gr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
int span = gr.width();
 

Проблема в том, что initStyleOption(&opt) protected. Поэтому придется наследоваться.
Записан
fuCtor
Гость
« Ответ #12 : Октябрь 14, 2009, 06:49 »

А вот эти методы не смогут ли помоч? Находятся в классе QStyle:
int sliderPositionFromValue ( int min, int max, int logicalValue, int span, bool upsideDown = false )
int sliderValueFromPosition ( int min, int max, int position, int span, bool upsideDown = false )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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