Значения с С++ в QML



  • Всем привет :)

    Нужна помощь. Не могу понять в чем проблема.

    С СОМ порта мне приходят данные, например: 19999.932
    С С++ кода я перекидываю это число в QML в SpinBox. Всё было бы хорошо, если бы SpinBox не округлял это число. В итоге в QML'е у меня 20000.000.

    Как мне сделать так, чтобы SpinBox не округлял её?

    Вот код моего SpinBox'а:

    SpinBox {
    	id: spBox_gear_part1
    	x: 258
    	y: 157
    	width: 200
    	height: 40
    
    	font.pointSize: 19
    	from: 0
    	value: 0
    	to: 20000000
    	wrap: true
    	editable: true
    	wheelEnabled: true
    
    	Material.theme: Material.Dark
    	Material.foreground: "white"
    	Material.accent: "#2196F3"
    
    	property int decimals: 3
    	property real realValue: value / 1
    	validator: DoubleValidator {
    		bottom: Math.min(spBox_gear_part1.from, spBox_gear_part1.to)
    		top: Math.min(spBox_gear_part1.from, spBox_gear_part1.to)
    	}
    	textFromValue: function(value, locale) {
    		return Number(value / 1).toLocaleString(locale, 'f', spBox_gear_part1.decimals)
    	}
    	valueFromText: function(text, locale) {
    		return Number.fromLocaleString(locale, text) * 1
    	}
    }
    

    Я буду очень благодарен за помощь



  • Я исправил. Может кому-то пригодиться:

    Код SpinBox'a:

    SpinBox {
    	id: spBox_gear_part1
    	x: 258
    	y: 157
    	width: 200
    	height: 40
    
    	font.pointSize: 19
    	from: 0
    	value: 0
    	to: 20000000
    	wrap: true
    	editable: true
    	wheelEnabled: true
    
    	Material.theme: Material.Dark
    	Material.foreground: "white"
    	Material.accent: "#2196F3"
    
    	property int decimals: 3
    	property real realValue: value / 1
    	validator: DoubleValidator {
    		bottom: Math.min(spBox_gear_part1.from, spBox_gear_part1.to)
    		top: Math.min(spBox_gear_part1.from, spBox_gear_part1.to)
    	}
    	textFromValue: function(value, locale) {
    		return Number(value / 1000.0).toLocaleString(locale, 'f', spBox_gear_part1.decimals)
    	}
    	valueFromText: function(text, locale) {
    		return Number.fromLocaleString(locale, text) * 1000.0
    	}
    }
    

    А для передачи значения в С++ уже я делаю так:

    На запись в порт:

    property double spBoxValue_Gear_Part1: mountForm.spinBox_Gear_Part1.value / 1000
    

    На чтение с порта:

    onSend_Gear_Part1: console.log(mountForm.spinBox_Gear_Part1.value = value * 1000
    


  • QML

    x: 258
    y: 157

    Им дали anchors и layouts, но они всё равно хардкодят координаты :)



  • @veryqtperson said in Значения с С++ в QML:

    Им дали anchors и layouts, но они всё равно хардкодят координаты :)

    Да-да-да :)

    Я просто не меняю размеры формы чтобы использовать якори и привязки. Окно всегда у меня статического размера :) да и кривовато работает, если такие настройки делать через интерфейс, а не код



  • Повезло тогда )



  • @veryqtperson said in Значения с С++ в QML:

    Повезло тогда )

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



  • Поначалу сложновато "въехать" в это и усвоить все особенности, но когда разобрался - это самый самолёт: никаких координат, прекрасный адаптивный интерфейс. Для embedded разработки самое то, особенно когда таргеты представлены целым семейством устроств с разными экранами.


Log in to reply
 

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