Подключение QSlider и QDoubleSpinBox застревает на определенных значениях - PullRequest
2 голосов
/ 28 мая 2020

Я использую в своем приложении в основном двойные ползунки, и я подключаю каждый из них к ползунку, чтобы c синхронизировать их значения.

Метод, который я использую, работает отлично, за исключением случаев, когда значение счетчика достигает 0.28, 0.56 и 1.12. При использовании колеса прокрутки для изменения ползунка и счетчика или кнопок счетчика оно застревает на одном или всех этих значениях и больше не продвигается.

Я сделал образец приложения только с одним ползунком и двойным счетчиком, которые демонстрируют такое же поведение.

главное окно. cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->horizontalSlider, &QSlider::valueChanged, [=]() {emit changeSpinBoxValWithSliderVal(ui->horizontalSlider->value(), 0.01, "doubleSpinBox");});
    connect(ui->doubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=](double) {emit changeSliderValWithSpinBoxVal(ui->doubleSpinBox->value(), 100, "horizontalSlider");});
}
void MainWindow::changeSpinBoxValWithSliderVal(int sliderValue, double stepSize, QString spinBoxName)
{
    MainWindow::findChild<QDoubleSpinBox*>(spinBoxName)->setValue(double(sliderValue*stepSize));
}

void MainWindow::changeSliderValWithSpinBoxVal(double spinBoxValue, int multiplier, QString sliderName)
{
    MainWindow::findChild<QSlider*>(sliderName)->setValue(int(spinBoxValue*multiplier));
}
MainWindow::~MainWindow()
{
    delete ui;
}

QSlider range : 0-200

Размер шага QSlider: 1

Диапазон QDoubleSpinbox: 0,00-2,00

Размер шага QDoubleSpinbox: 0,01

spin box attributes

slider attributes

...