Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: andrewshkovskii от Октябрь 13, 2009, 15:43



Название: QSlider. координата ползунка(не самого виджета)
Отправлено: andrewshkovskii от Октябрь 13, 2009, 15:43
Что нужно : получить координаты ползунка у слайдера.
Зачем : для того, что бы реализовать вот это
(http://img340.imageshack.us/img340/4707/close.png)
т.е рисовать линию на QGraphicView прямо под ползунком.
Необходимо учесть, что максимальное значение слайдера(maximum()) может меняться во время выполнения программы.


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: Авварон от Октябрь 13, 2009, 16:06
может QPaintDevice чем поможет, но врядли... имхо лучше написать свой контрол-линейку


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: alexman от Октябрь 13, 2009, 16:09
Примерно так: устанавливаешь минимальное значение слайдера в 0, а максимальное значение при resize в ширину виджета; далее при изменении положения слайдера value() есть координата по оси OX.


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


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: Авварон от Октябрь 13, 2009, 16:20
2 alex, центр ползунка не совпадает с краем полоски ползунка...


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: alexman от Октябрь 13, 2009, 16:25
2 alex, центр ползунка не совпадает с краем полоски ползунка...

+- константа


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: alexman от Октябрь 13, 2009, 16:26
Примерно так: устанавливаешь минимальное значение слайдера в 0, а максимальное значение при resize в ширину виджета; далее при изменении положения слайдера value() есть координата по оси OX.
Максимальное значение зависит от других параметров, и вычисляется на основе входных данных.
(это программа кластерного анализа по алгоритму Прима(мин. остовное дерево)), вот и в зависимости от макс. значения в остовном дереве и устанавливается макс.значение слайдера..

Тогда лучше реализуй свой виджет.


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: baka от Октябрь 13, 2009, 17:10
Возможно начальную позицию слайдера(при которой он нулевой) в пикселях удастся узнать с помощью QStyleOptionSlider через стили. т.к. под разными платформами отступ первой позиции слайдера от края разный.


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: SLiDER от Октябрь 13, 2009, 23:46
2 alex, центр ползунка не совпадает с краем полоски ползунка...

+- константа

При работе с Qt никогда, повторяю, никогда не забывайте про стили, Вы никогда не можете гарантированно знать значение этой самой константы !!!


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: Kolobok от Октябрь 13, 2009, 23:58
Цитировать
int QStyle::sliderPositionFromValue ( int min, int max, int logicalValue, int span, bool upsideDown = false )   [static]


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: andrewshkovskii от Октябрь 14, 2009, 00:17
Эм..извините за глупость, но что за параметр Span, в этом методе?


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: Kolobok от Октябрь 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. Поэтому придется наследоваться.


Название: Re: QSlider. координата ползунка(не самого виджета)
Отправлено: fuCtor от Октябрь 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 )