2015-06-17 4 views
0

Я реализовал интерфейс, в котором пользователь рисует кадр, а затем переходит к следующему кадру, который увеличит значение ползунка на 1. Пользователь также может увеличивать или уменьшать значение ползунка. Но если пользователь нарисовал только до кадра 20, тогда пользователь не сможет перетаскивать слайдер за пределы 20. Как я могу это гарантировать?Есть ли способ предотвратить перемещение слайдера Qt за пределы значения?

+0

Не sur e Я правильно понял вопрос, но что не так с ['setMaximum (int)'] (http://doc.qt.io/qt-5/qabstractslider.html#maximum-prop)? – Bowdzone

ответ

2

Используйте этот класс и просто установить setRestrictValue(), что является минимальным значением, которое пользователь может перетащить ползунок

slider.h

#ifndef SLIDER_H 
#define SLIDER_H 

#include <QSlider> 


class Slider : public QSlider 
{ 
    Q_OBJECT 
public: 
    Slider(QWidget * parent = 0); 
    ~Slider(); 

    void setRestrictValue(int value); 

private slots: 
    void restrictMove(int index); 

private: 
    int m_restrictValue; 
}; 

#endif // SLIDER_H 

slider.cpp

#include "slider.h" 

Slider::Slider(QWidget *parent) : QSlider(parent) 
{ 
    connect(this,SIGNAL(valueChanged(int)),this,SLOT(restrictMove(int))); 

    m_restrictValue = 0; 
} 

Slider::~Slider() 
{ 

} 

void Slider::setRestrictValue(int value) 
{ 
    m_restrictValue = value; 
} 


void Slider::restrictMove(int index) 
{ 
    if(index < m_restrictValue) 
    { 
     this->setSliderPosition(m_restrictValue); 
    } 
} 

пример:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    ui->slider1->setRange(0,100); //slider range 
    ui->slider1->setValue(50); //slider current value 
    ui->slider1->setRestrictValue(22); //the minimum value that user can drag the slider 

    ui->slider2->setRange(0,100);//slider range 
    ui->slider2->setValue(50); //slider current value 
    ui->slider2->setRestrictValue(11);//the minimum value that user can drag the slider 
}