Название: 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 Я думаю, это длина канавки в пикселях. Вычисляется примерно так:
Код
Проблема в том, что 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 ) |