Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QtWidgets>
- class RangedSlider : public QSlider {
- int mRangeMin, mRangeMax;
- public:
- explicit RangedSlider(Qt::Orientation orientation, QWidget* parent= nullptr):
- QSlider(orientation, parent),mRangeMin(minimum()),mRangeMax(maximum()) {}
- explicit RangedSlider(QWidget* parent=nullptr):RangedSlider(Qt::Vertical, parent){}
- void sliderChange(SliderChange change) override {
- if(change == QAbstractSlider::SliderValueChange) {
- fixValue();
- }
- QSlider::sliderChange(change);
- }
- void setRangeMin(int rangeMin) { this->mRangeMin = rangeMin; fixValue(); }
- void setRangeMax(int rangeMax) { this->mRangeMax = rangeMax; fixValue(); }
- int rangeMin() const { return mRangeMin; }
- int rangeMax() const { return mRangeMax; }
- private:
- void fixValue() {
- int correctValue = value();
- if(value() < mRangeMin)
- correctValue = mRangeMin;
- if(value() > mRangeMax)
- correctValue = mRangeMax;
- if(correctValue!= value()){
- //this will emit value changed with the correct value
- setValue(correctValue);
- //a hack to stop QSlider from emiting valueChanged with the
- //old value
- blockSignals(true);
- QObject signalSource;
- //unblock signals for this object as soon as the event loop is
- //reached again
- QObject::connect(&signalSource, &QObject::destroyed, this, [=] {
- blockSignals(false);
- }, Qt::QueuedConnection);
- }
- }
- };
- int main(int argc, char* argv[]) {
- QApplication a(argc, argv);
- QWidget widget;
- QVBoxLayout layout(&widget);
- RangedSlider slider;
- QObject::connect(&slider, &QSlider::valueChanged, [&slider](int value){
- qDebug() << value << " " << slider.value();
- });
- slider.setRangeMin(10);
- slider.setRangeMax(80);
- layout.addWidget(&slider);
- widget.show();
- return a.exec();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement