Я реализовал интерфейс, в котором пользователь рисует кадр, а затем переходит к следующему кадру, который увеличит значение ползунка на 1. Пользователь также может увеличивать или уменьшать значение ползунка. Но если пользователь нарисовал только до кадра 20, тогда пользователь не сможет перетаскивать слайдер за пределы 20. Как я могу это гарантировать?Есть ли способ предотвратить перемещение слайдера Qt за пределы значения?
0
A
ответ
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
}
Не sur e Я правильно понял вопрос, но что не так с ['setMaximum (int)'] (http://doc.qt.io/qt-5/qabstractslider.html#maximum-prop)? – Bowdzone