2013-12-17 3 views
3

Я хочу послать значение с плавающей точкой «шаг» с кварт horizontalSlider, я пытаюсь это, и он не работает:Qt horizontalSlider отправить значения с плавающей точкой

horizontalSlider.setRange(0,25) 
    horizontalSlider.setSingleStep(horizontalSlider.maximum()/100.0) 
    horizontalSlider.valueChanged.connect(self.valueHandler) 

Тогда я получаю значение здесь:

def valueHandler(self,value):  
     print value 

Но, тем не менее, выход Im получаю 1,2,3,4,5,6,7,8 .......

ответ

3

Qt silders может иметь только целые значения. Вам нужно изменить измерительную единицу, чтобы было достаточно целочисленной точности. Например, обычно 100 позиций ползунка можно считать достаточным. Поэтому вам нужно установить диапазон ползунков (0, 100) и масштабировать ваши значения с плавающей точкой, чтобы минимальное значение было преобразовано в 0, а максимальное значение преобразуется в 100 (т. Е. Преобразует ваши значения с плавающей запятой в проценты).

Вы можете создать подкласс ползунка Qt и реализовать описанную логику внутри, если хотите, чтобы ваш основной код был чистым.

2

Поскольку вы хотите один шаг, чтобы быть 25/100 = 0,25, это то, как вы должны это сделать:

horizontalSlider.setRange(0,100) 
horizontalSlider.setSingleStep(1) 
horizontalSlider.valueChanged.connect(self.valueHandler) 

def valueHandler(self,value): 
    scaledValue = float(value)/4  #type of "value" is int so you need to convert it to float in order to get float type for "scaledValue" 
    print scaledValue , type(scaledValue) 
Смежные вопросы