Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QSlider mouse direct jump

Tags:

qt

qslider

Instead of stepping when the user clicks somewhere on the qslider I want to make the slider jump to that position. How can this be implemented ?

like image 961
Vihaan Verma Avatar asked Jun 21 '12 06:06

Vihaan Verma


1 Answers

after having problems with all versions of @spyke @Massimo Callegari and @Ben (slider position wasnt correct for the whole area) I found some Qt Style functionality within QSlider sourcecode: QStyle::SH_Slider_AbsoluteSetButtons.

You have to create a new QStyle which can be a very annoying, or you use ProxyStyle as shown by user jpn in http://www.qtcentre.org/threads/9208-QSlider-step-customize?p=49035#post49035

I've added another constructor and fixed a typo, but used the rest of the original source code.

#include <QProxyStyle>  class MyStyle : public QProxyStyle { public:     using QProxyStyle::QProxyStyle;      int styleHint(QStyle::StyleHint hint, const QStyleOption* option = 0, const QWidget* widget = 0, QStyleHintReturn* returnData = 0) const     {         if (hint == QStyle::SH_Slider_AbsoluteSetButtons)             return (Qt::LeftButton | Qt::MidButton | Qt::RightButton);         return QProxyStyle::styleHint(hint, option, widget, returnData);     } }; 

now you can set the style of your slider in the sliders constructor (if your slider is derived from QSlider):

setStyle(new MyStyle(this->style())); 

or it should work this way if it is a standard QSlider:

standardSlider.setStyle(new MyStyle(standardSlider->style())); 

so you use the original style of that element, but if the QStyle::SH_Slider_AbsoluteSetButtons "property" is asked you return as you want ;)

maybe you'll have to destroy these proxystyles on slider deletion, not tested yet.

like image 155
Micka Avatar answered Sep 26 '22 12:09

Micka