Top.Mail.Ru
Уведомления
Очистить все

QML SpinBox поддерживает только целые числа?

(@anatoliy84)
New member

Здравствуйте, изучаю SpinBox в QML и не могу понять: такое ощущение, что поддерживаются только целые числа. Все свойства (to, from, step и остальные) имеют тип int...

А как быть если нужны десятичные значения? В QT Widgets были QSpinBox и QDoubleSpinBox, не может же быть такого, что для QML остановились на полпути и не доделали такой базовый функционал.

Цитата
Создатель темы Размещено : 16.08.2025 12:25
Метки темы
Aveal
(@aveal)
Top level Admin

Доброго времени суток! SpinBox можно кастомизировать под поддержку любого тип данных, вот вариант для float значений:

SpinBox {
    id: spinBox
    from: 0
    value: decimalToInt(1.1)
    to: decimalToInt(100)
    stepSize: decimalFactor
    editable: true
    anchors.centerIn: parent

    property int decimals: 2
    property real realValue: value / decimalFactor
    readonly property int decimalFactor: Math.pow(10, decimals)

    function decimalToInt(decimal) {
        return decimal * decimalFactor
    }

    validator: DoubleValidator {
        bottom: Math.min(spinBox.from, spinBox.to)
        top:  Math.max(spinBox.from, spinBox.to)
        decimals: spinBox.decimals
        notation: DoubleValidator.StandardNotation
    }

    textFromValue: function(value, locale) {
        return Number(value / decimalFactor).toLocaleString(locale, 'f', spinBox.decimals)
    }

    valueFromText: function(text, locale) {
        return Math.round(Number.fromLocaleString(locale, text) * decimalFactor)
    }
}

Здесь полное описание - ссылка.

ОтветитьЦитата
Размещено : 17.08.2025 10:21
Поделиться: