这里实现的为小数点后一位滑条。
主要的思路是将小数扩大10倍,然后转换。
只需在对应的槽函数进行转换即可。
下面是效果图:
下面是完整代码:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QKeyEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void initUI();
void initConnect();
private slots:
void on_setLineEdit(int value);
void on_setSliderValue(QString text);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->initUI();
this->initConnect();
}
Widget::~Widget()
{
delete ui;
}
void Widget::initUI()
{
ui->Slider->setMinimum(0);
ui->Slider->setMaximum(1000);
}
void Widget::initConnect()
{
connect(ui->Slider,&QSlider::valueChanged,this,&Widget::on_setLineEdit);
connect(ui->lineEdit,&QLineEdit::textChanged,this,&Widget::on_setSliderValue);
}
void Widget::on_setLineEdit(int value)
{
double pos = value / 10.0;
QString str = QString("%1").arg(pos);
ui->lineEdit->setText(str);
}
void Widget::on_setSliderValue(QString text)
{
if(true == text.isEmpty() || '.' == text.back())
{
return ;
}
double LineEditValue = (text.toDouble() * 10.0);
ui->Slider->setValue(static_cast<int>(LineEditValue));
}
需要注意的是:滑条的最大值需要设置,比如我这里是小数点后一位,那么我们变为整数需要乘10,所以我们最大值设置为1000。
如果是小数点后两位,则需要设置为10000。
最重要的一点是小数和整数之间的转换,如果转换出错的话,会导致我们有一些值输入后,自动变为其他的数。
现在这个代码已经验证过没有问题,如果需要扩展的话,需要注意。