Editable SpinBox in QML



  • Всем привет!

    Имеется у меня SpinBox в QML приложении. С ним всё в порядке, за исключением того, что если свойство editable присваивается true, и сменить значение на (например) 0.06, то значение автоматически будет 0.00

    Если будет editable: false, то при изменении значение таким же и останется. Если я напишу 0.06, то 0.06 таким и будет и автоматически не будет меняться на 0.00.

    А мне нужно, чтобы пользователь смог вводить значения с клавиатуры

    В чем может быть проблема? Как такое происходит и подскажите, как решить. Буду сильно благодарен.

    Код:

    SpinBox {                                                                                       
    	id: spBox_AccelerationTime                                                                  
    	from: 0                                                                                     
    	value: 0                                                                                    
    	to: 10 * 10                                                                                 
    	stepSize: 1                                                                                 
    	anchors.centerIn: parent                                                                    
                                                                                                    
    	editable: true                                                                              
    	wrap: true                                                                                  
    	wheelEnabled: true                                                                          
                                                                                                    
    	property int decimals: 1                                                                    
    	property real realValue: value / 1                                                          
    	anchors.verticalCenterOffset: -152                                                          
    	anchors.horizontalCenterOffset: 37                                                          
                                                                                                    
    	validator: DoubleValidator {                                                                
    		bottom: Math.min(spBox_AccelerationTime.from, spBox_AccelerationTime.to)                
    		top:  Math.max(spBox_AccelerationTime.from, spBox_AccelerationTime.to)                  
    	}                                                                                           
                                                                                                    
    	textFromValue: function(value, locale) {                                                    
    		return Number(value / 10).toLocaleString(locale, 'f', spBox_AccelerationTime.decimals)  
    	}                                                                                           
    }


  • Решил проблему.
    Внизу самого SpinBox'а под textFromValue нужно добавить valueFromText

    valueFromText: function(text, locale) {
    			return Number.fromLocaleString(locale, text) * 1000
    		}
    

    Весь код SpinBox'a:

    SpinBox {                                                                           
    	id: spBox_Gear                                                                  
    	from: 0                                                                         
    	value: 0                                                                        
    	to: 2000                                                                        
    	stepSize: 1                                                                     
    	anchors.centerIn: parent                                                        
                                                                                        
    	editable: true                                                                  
    	wrap: true                                                                      
    	wheelEnabled: true                                                              
                                                                                        
    	property int decimals: 3                                                        
    	property real realValue: value / 10                                             
    	anchors.verticalCenterOffset: -110                                              
    	anchors.horizontalCenterOffset: 37                                              
                                                                                        
    	validator: DoubleValidator {                                                    
    		bottom: Math.min(spBox_Gear.from, spBox_Gear.to)                            
    		top:  Math.max(spBox_Gear.from, spBox_Gear.to)                              
    	}                                                                               
                                                                                        
    	textFromValue: function(value, locale) {                                        
    		return Number(value / 1000).toLocaleString(locale, 'f', spBox_Gear.decimals)
    	}                                                                               
                                                                                        
    	valueFromText: function(text, locale) {                                         
    		return Number.fromLocaleString(locale, text) * 1000                         
    	}                                                                               
    }
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.