Qt实现QSpinBox微调器和QSlider拖动条联合使用
问题:QSlider步进无法设置多精度步进为1,在我们需求中需要拖动滑条的时候为小数;
UI界面:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void initUI(int valmin,int valmax);
private slots:
void on_setBox(int value);
void on_setSliderValue(double val);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initUI(0,100);
connect(ui->Slider,&QSlider::valueChanged,this,&MainWindow::on_setBox);//移动滑块,box同时设置数据
void(QDoubleSpinBox:: * spSignal )(double) = &QDoubleSpinBox::valueChanged;
connect(ui->doubleSpinBox,spSignal,this,&MainWindow::on_setSliderValue);//改变box参数同时移动滑块
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initUI(int min,int max)
{
//根据需求放大数据,o.1数据乘100
ui->Slider->setMinimum(min*100);
ui->Slider->setMaximum(max*100);
}
void MainWindow::on_setBox(int value)
{
double Boxpos = value / 100.0;
QString str = QString("%1").arg(Boxpos);
ui->doubleSpinBox->setValue(Boxpos);
ui->lineEdit->setText(str);
}
void MainWindow::on_setSliderValue(double valder)
{
QString text=QString::number(valder,'f',2);
if(true == text.isEmpty() || '.' == text.back())
{
return ;
}
double LineEditValue = (text.toDouble() * 100.0);
ui->Slider->setValue(LineEditValue);
//ui->Slider->setValue(static_cast<int>(LineEditValue));
}
实现效果: