Обрабатывать ввод, пока пользователь редактирует ввод в поле пользовательского интерфейса SpinBox - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть этот StyledSpinBox.qml файл для моего пользовательского StyledSpinBox типа QML:

import QtQuick 2.5
import QtQuick.Controls 2.0 as QQC2
import QtQuick.Controls 2.2 as QQC22 // For onValueModified signal which was introduced in QtQuick.Controls 2.2 (Qt 5.9)

QQC22.SpinBox {
    id: control
    font.family: // ...
    font.weight: // ...
    font.pixelSize: // ...

    onValueModified: {
        console.log("Value modified:", value)
    }

    background: Rectangle {
        border.color: // ...
        color: // ...
    }

    down.indicator: Rectangle {
        x: control.mirrored ? parent.width - width : 0
        height: parent.height
        implicitWidth: 40
        implicitHeight: 40
        border.color: // ...
        color: // ...
        Image {
            anchors.centerIn: parent
            source: "images/spinbox_down.png"
        }
    }

    up.indicator: Rectangle {
        x: control.mirrored ? 0 : parent.width - width
        height: parent.height
        implicitWidth: 40
        implicitHeight: 40
        border.color: // ...
        color: // ...
        Image {
            anchors.centerIn: parent
            source: "images/spinbox_up.png"
        }
    }
}

Я использую пользовательский тип StyledSpinBox QML следующим образом:

            StyledSpinBox {
                id: // ...
                implicitWidth: // ...
                implicitHeight: // ...
                to: 20
                stepSize: 1
                from: 1
                Layout.leftMargin: 8
                contentItem: StyledTextInput {
                    inputMethodHints: Qt.ImhFormattedNumbersOnly
                    onTextEdited: {
                        console.log("Text edited:", text)
                        var textInt = parseInt(text)
                        console.log("Text int:", textInt)
                        if (isNaN(textInt) || textInt === undefined) {
                            ;
                        } else {
                            // Process input: textInt
                        }
                    }
                }
                onValueChanged: {
                    // Process input: value
                }
                onValueModified: {
                    console.log("Value modified:", value)
                    // Process input: value
                }
            }

полученное поле пользовательского интерфейса:

SpinBox on UI

onValueChanged и onValueModified обработчики сигналов работают только тогда, когда пользователь нажимает клавишу ввода на клавиатуре или когда пользователь меняет фокус пользовательского интерфейса с SpinBox на другое поле пользовательского интерфейса. Но мне нужно обработать пользовательский ввод, пока пользователь редактирует . Как видно из кода выше, чтобы иметь возможность обрабатывать входные данные SpinBox, когда пользователь редактирует SpinBox, я использую onTextEdited обработчик сигнала:

onTextEdited: {

  console.log("Text edited:", text)
    var textInt = parseInt(text)
    console.log("Text int:", textInt)
    if (isNaN(textInt) || textInt === undefined) {
        ;
    } else {
        // Process input: textInt
    }

}

Но, когда пользователь редактирует, введенный текст может быть выше to: 20 максимум, как 33 > 20:

Edit is larger than maximum

Теперь вопрос:

  • Есть ли какой-либо стандартный метод для обработки ввода SpinBox во время его редактирования пользователем?
  • Если используется вышеупомянутый подход onTextEdited, каков стандартный метод проверки ввода? Например, чтобы убедиться, что ввод между SpinBox from и to bounds.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...