2013-12-17 36 views
3

我想送一個浮點值「步」與QT水平滑,我想這一點,它不工作:Qt的水平滑發送浮點值

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

然後我在這裏所獲得的價值:

def valueHandler(self,value):  
     print value 

但是,但是,輸出即時得到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)