Название: QSlider PageStep Отправлено: hormeek от Март 12, 2014, 23:26 Здравствуйте форумчане!
У меня вопрос про QSlider и page step, параметр такой который двигает handle в сторону нажатия. Хотелось бы двинуть handle прям в точку нажатия а не на значение pagestep в сторону нажатия. Знает кто как так сделать? Название: Re: QSlider PageStep Отправлено: kambala от Март 12, 2014, 23:35 setValue()/setSliderPosition()?
Название: Re: QSlider PageStep Отправлено: hormeek от Март 12, 2014, 23:47 а поточнее можно новичку?)
Название: Re: QSlider PageStep Отправлено: kambala от Март 13, 2014, 01:10 новичок не знает как методы вызывать или как документацией пользоваться? slider->setValue(666);
Название: Re: QSlider PageStep Отправлено: hormeek от Март 13, 2014, 14:56 Не, я вроде как все это умею, только чтобы задать значения этими методами нужно знать куда нажал пользователь, сигнала такого я не нашел.=(
Название: Re: QSlider PageStep Отправлено: kambala от Март 13, 2014, 15:57 void QAbstractSlider::sliderPressed() [signal]
This signal is emitted when the user presses the slider with the mouse, or programmatically when setSliderDown(true) is called. если не подойдет, то унаследуйся от QSlider и переопредели mousePressEvent. либо фильтр событий на слайдер поставь если наследоваться не хочешь. Название: Re: QSlider PageStep Отправлено: hormeek от Март 13, 2014, 18:11 Спасибо, буду копать в этом направлении=)
Название: Re: QSlider PageStep Отправлено: Igors от Март 13, 2014, 20:45 void QAbstractSlider::sliderPressed() [signal] Твк это может быть нажатие в thumb'e. Ладно, пусть др сигнал, не суть. Ну а дальше что? Нужно знать размер thimb'a (откуда?), сравнивать его с общим (без учета кнопок) и.т.д. - выглядит муторно. Когда-то замечал (правда для scrollbar'а) что если "нажать и держать" то thimb сам прибежит в эту точку. Может зарядить нули в setRepeatAction (вдруг прокатит на шару :))This signal is emitted when the user presses the slider with the mouse, or programmatically when setSliderDown(true) is called. Название: Re: QSlider PageStep Отправлено: Old от Март 13, 2014, 21:19 Спасибо, буду копать в этом направлении=) Для определения значения слайдера по координате мыши можно воспользоваться:int QStyle::sliderValueFromPosition ( int min, int max, int position, int span, bool upsideDown = false ) [static] Название: Re: QSlider PageStep Отправлено: Igors от Март 14, 2014, 11:59 Для определения значения слайдера по координате мыши можно воспользоваться: А откуда взять min/max (в тех же координатах что и мышь)? Они совсем не равны размеру слайдера. Может так:int QStyle::sliderValueFromPosition ( int min, int max, int position, int span, bool upsideDown = false ) [static] - сделать installEventFilter, отловить mousePressed и там: - отловить style()->subControlRect(SC_ScrollBarAddPage..) - вычислить min/max через SC_ScrollBarGroove и span через SC_ScrollBarSlider Хотелось бы чего-то попроще, но не вижу как Edit: немного попутал, min/max - это значения слайдера, они известны. Вычислять надо position и span которые совсем не равны координатам мыши и виджета. Название: Re: QSlider PageStep Отправлено: Old от Март 14, 2014, 12:04 А откуда взять min/max (в тех же координатах что и мышь)? Она (функция) сама все сделает, она специально для этого сделана.Название: Re: QSlider PageStep Отправлено: Igors от Март 14, 2014, 12:34 Прильнем к первоисточнику
Код Для начала это передрать подставив вместо q сам виджет и вместо pos - x(y) мыши Название: Re: QSlider PageStep Отправлено: Old от Март 14, 2014, 12:38 Для начала это передрать подставив вместо q сам виджет и вместо pos - x(y) мыши Для чего?span - это длина или высота слайдера в зависимости от ориентации. position - смещение мыши от начала виджета. Но если хочется скопировать, то можно. :) Название: Re: QSlider PageStep Отправлено: Igors от Март 14, 2014, 12:50 Для чего? Пример: длина слайдера rect().width() = 100, но ширина thumb'а (ползунка) = 20. Тогда span уже не 100 а 80. Кроме того слайдер может иметь прибамбасы которые делают размер groove меньше. С position то же самое. A QStyle::sliderValueFromPosition - это static ф-ция, значит ничего не знает о всех этих деталях.span - это длина или высота слайдера в зависимости от ориентации. position - смещение мыши от начала виджета. Название: Re: QSlider PageStep Отправлено: Old от Март 14, 2014, 12:56 Пример: длина слайдера rect().width() = 100, но ширина thumb'а (ползунка) = 20. Тогда span уже не 100 а 80. Какая разница какая ширина ползунка? Пусть он будет хоть 50 из 100. :) Если пользователь ткнул посередине, то центральная линия ползунка должна стать на эту позицию. Тем более никто не мешает получать их значения и корректировать параметры.Кроме того слайдер может иметь прибамбасы которые делают размер groove меньше. С position то же самое. Бла-бла-бла. ;)Название: Re: QSlider PageStep Отправлено: Igors от Март 14, 2014, 13:04 Какая разница какая ширина ползунка? Пусть он будет хоть 50 из 100. :) Если пользователь ткнул посередине, то центральная линия ползунка должна стать на эту позицию. Вот тыкаю прямо в окне где пишу это сообщение - однако ж на середину не становится, а прокручивает на страницуБла-бла-бла. ;) Как всегда, "знаток" теряет терпение и начинает хамить :)Название: Re: QSlider PageStep Отправлено: Old от Март 14, 2014, 13:12 Вот тыкаю прямо в окне где пишу это сообщение - однако ж на середину не становится, а прокручивает на страницу Куда вы тыкаете? Какие страницы?ТС хочет сделать определенное поведение у своего кастомного виджета, я предложил посмотреть на функцию. Что не так? :) Как всегда, "знаток" теряет терпение и начинает хамить :) А где я хамлю, я так же как и вы что-то придумываю, только мне это словами описывать лениво. :)А вот вы уже сдержаться не можете? Переходите на личности. Ну да ладно, такие высказывания напыщенного незнайки кроме улыбки ничего не вызывают. :) Название: Re: QSlider PageStep Отправлено: Igors от Март 14, 2014, 15:06 я предложил посмотреть на функцию. Что не так? :) Вот это не такspan - это длина или высота слайдера в зависимости от ориентации. position - смещение мыши от начала виджета. Ну да ладно, такие высказывания напыщенного незнайки кроме улыбки ничего не вызывают. :) Где Вы усмотрели "напыщенность"? А вот ожидать что static метод сам учтет текущий стиль, мягко говоря, наивно. Но я же не взвиваюсь, а делаю вид что не заметил как всезнайка пролил соус на скатерть :)Вы пожалуйста не нервничайте, обсуждаем, все могут ошибаться, это нормально Название: Re: QSlider PageStep Отправлено: Old от Март 14, 2014, 15:31 А вот ожидать что static метод сам учтет текущий стиль, мягко говоря, наивно. Отчего же. Статический метод легко мог бы получать любые константы текущего стиля через QApplication::style(). То что он этого не делает, ну что же... ТС всегда сможет получить эти константы сам и скорректировать параметры. Не спешите сразу писать, подумайте. :) Но я же не взвиваюсь, а делаю вид что не заметил как всезнайка пролил соус на скатерть :) Конечно, потому что не уверены в себе, скорее всего из-за "глубоких фундаментальных знаний". :)Вы пожалуйста не нервничайте, обсуждаем, все могут ошибаться, это нормально Я не нервничаю, и не вижу в чем я ошибся? :)Название: Re: QSlider PageStep Отправлено: Igors от Март 17, 2014, 14:18 А вот и мне пришлось решать ту же проблему. Нашел способ проще
Код
|