Qt подключает слайдер к даблспинбоксу

это код, который я использую для преобразования int моего ползунка в двойной.

void simMotionControl::on_horizontalSlider_speed_valueChanged(int value)
{
    value = double (value/100); //i set the range of the slider from 0 to 10000
    ui->doubleSpinBox_speed->setValue(value);
}

Когда я подключаю свой ползунок к моему двойному счетчику, он меняет свое число только для каждого целого числа. Как я могу заставить мой ползунок изменить мой двойной счетчик с точностью до двух знаков после запятой? Кроме того, я хочу также подключить счетчик обратно к моему ползунку, поэтому, если я изменю значение в счетчике, ползунок изменится. благодарю вас!!


person fluxD613    schedule 02.07.2014    source источник
comment
Начните с установки значения с помощью double, а не int? Разве это не ваш фактический код?   -  person Leiaz    schedule 03.07.2014
comment
ползунок принимает и выводит только значения int, поэтому мне нужно было преобразовать его в двойное. это реальный код   -  person fluxD613    schedule 03.07.2014
comment
Я не уверен, но у HorizontalSlider есть свойство - шаг. По умолчанию шаг равен 1. Я не знаю, есть ли способ сделать его равным 0,1 или еще чему-то, но вы можете попробовать найти такую ​​возможность. Надеюсь, это поможет.   -  person tty6    schedule 03.07.2014


Ответы (1)


Вы делите два целых числа, что всегда приводит к целочисленному значению. Вы должны разделить value на 100.0, который является десятичным:

void simMotionControl::on_horizontalSlider_speed_valueChanged(int value)
{
    double val = value/100.0; //i set the range of the slider from 0 to 10000
    ui->doubleSpinBox_speed->setValue(val);
}

Также возможно удвоение значения перед делением:

double val = (double)value/100;

Для обновления значения ползунка при смене спинбокса вы можете:

void simMotionControl::on_doubleSpinBox_speed_valueChanged(double arg1)
{
    ui->horizontalSlider_speed->setValue(arg1*100);
}
person Nejat    schedule 03.07.2014
comment
Только примечание... вы можете использовать более современный шаблонный стиль приведения: value = static_cast‹double›(value)/100; - person Silicomancer; 03.07.2014
comment
я пробовал все способы, которые вы упомянули, чтобы преобразовать значение int в двойное значение, но не сработало ... я все еще получаю только целые числа на моем doublespinbox, еще раз спасибо! - person fluxD613; 03.07.2014
comment
@ fluxD613 Вы должны назначить его двойной переменной. Я отредактировал ответ. - person Nejat; 03.07.2014
comment
когда я пытаюсь управлять ползунком из окна двойного вращения, он возвращает все обратно к целым числам, только вот мой код: void simMotionControl::on_horizontalSlider_speed_valueChanged(int speedslider_val) //must change slider value to double bacause slider only does integers { double speed_actual = (double) speedslider_val/100.0; ui->doubleSpinBox_speed->setValue(speed_actual); } void simMotionControl::on_doubleSpinBox_speed_valueChanged(double speed_actual) { int speedslider_val = (int) speed_actual*100; ui->horizontalSlider_speed->setValue(speedslider_val); } - person fluxD613; 03.07.2014
comment
Должно быть: int speedslider_val = speed_actual*100; ui->horizontalSlider_speed->setValue(speedslider_val);. Вы должны опустить приведение к int. Потому что вы пропустите значения десятичной точки. - person Nejat; 04.07.2014