Use user-specifying QSlider step
-
Hi, all:
Another naive question.
I'm using Ubuntu 12.10+Qt Creator 2.5.2 Based on Qt 4.8.2 (32 bit)
I'm trying to design a slider with interval 2, starting from 1 and ending in 9.
Namely, I hope the possible values obtained while I'm dragging the slider are:
1, 3, 5, 7, 9(all odd numbers)And, my code in the produced ui file is copied as follows:
@horizontalSlider_aperturesize = new QSlider(edgedetectiondialog_laplacian);
horizontalSlider_aperturesize->setObjectName(QString::fromUtf8("horizontalSlider_aperturesize"));
horizontalSlider_aperturesize->setGeometry(QRect(150, 20, 180, 30));
horizontalSlider_aperturesize->setMinimum(1);
horizontalSlider_aperturesize->setMaximum(9);
horizontalSlider_aperturesize->setSingleStep(2);
horizontalSlider_aperturesize->setPageStep(3);
horizontalSlider_aperturesize->setValue(3);
horizontalSlider_aperturesize->setOrientation(Qt::Horizontal);
horizontalSlider_aperturesize->setTickPosition(QSlider::TicksBelow);
horizontalSlider_aperturesize->setTickInterval(2);
@I really can't see anything wrong, but my later-on code went wrong because I got 4 from the slider reading (obviously, this is an even number, which is out of my expectation.)
Any suggestions on how to avoid such mistakes?
Thank you very much.
Best Regards
Pei -
Here's some c++ code to fix this, I used this method when i was having the same problem.
Note that i am not experienced with c++, So i apologize for any mistakes in the code below.Connect this function to slider.valueChanged:
void slider_value_mapper(int v) { int steps = 10; // Enter the amount of user specified steps you want here. slider->setValue(static_cast<int>(v / steps) * steps); // Static cast to make sure its not a floating point number. };
Another quick note, The slider may not be able to go to the end. You may wanna adjust its range for that, If it happens.