QML SpinBox не сохраняет нормально значения

Qt, QML, qtcreator


Всем привет!

Имеется у меня 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)
		}
	}
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

7
ДЧ
  • 11. Januar 2018 08:46
  • Die Antwort wurde als Lösung markiert.

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

valueFromText: function(text, locale) {                
	return Number.fromLocaleString(locale, text) * 1000
}                                                      
Вот весь код SpinBox'а:

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                         
	}                                                                               
}                                                                                   
    Виталий Антипов
    • 11. Januar 2018 08:58

    Добавьте:

    valueFromText: function(text, locale) {
                        return Number.fromLocaleString(locale, text) * 10
                    }
    и все получится.

      Так я так и сделал. Спасибо :)

        Виталий Антипов
        • 11. Januar 2018 09:17
        • (bearbeitet)

        Страничку не обновил. Извиняюсь :)

          Просто объясните мне кое что
          Если я не ошибаюсь, то в старых версиях импортов, элемент SpinBox сразу понимал и double и int. Зачем в новых версиях сделали такие костыли?

            Насколько я понял из документации, SpinBox в QtQuick.Controls 1.4 заточен для работы с числами, а в QtQuick.Controls 2.3 все костыли связаны с возможностью обработки строковых данных. Строки предлагается хранить в массивах, поэтому свойства value, from, to для работы с массивом должны иметь значения типа int.

              Капец. Не удобно.

              Спасибо за ответ :)

                Kommentare

                Nur autorisierte Benutzer können Kommentare posten.
                Bitte Anmelden oder Registrieren
                Letzte Kommentare
                A
                ALO1ZE19. Oktober 2024 08:19
                Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь Максимов5. Oktober 2024 07:51
                Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas55. Juli 2024 11:02
                QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                k
                kmssr8. Februar 2024 18:43
                Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                Jetzt im Forum diskutieren
                J
                JacobFib17. Oktober 2024 03:27
                добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                JW
                Jhon Wick1. Oktober 2024 15:52
                Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                КГ
                Кирилл Гусарев27. September 2024 09:09
                Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                F
                Fynjy22. Juli 2024 04:15
                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                Folgen Sie uns in sozialen Netzwerken