У меня есть этот 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
}
}
полученное поле пользовательского интерфейса:
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
:
Теперь вопрос:
- Есть ли какой-либо стандартный метод для обработки ввода SpinBox во время его редактирования пользователем?
- Если используется вышеупомянутый подход
onTextEdited
, каков стандартный метод проверки ввода? Например, чтобы убедиться, что ввод между SpinBox from
и to
bounds.