QML
← 전체 컴포넌트

Input Number

숫자를 직접 입력하거나 증감 버튼으로 조절하는 필드입니다. 허용 범위와 증감 간격을 정할 수 있습니다.

import Syidax.Core.InputNumber

지원 QML 타입

타입정의 / 역할
증감 버튼·범위 제한·검증을 제공하는 숫자 입력 필드입니다.

예제로 보기

미리보기는 Qt 실행 화면의 이미지입니다. 아래 버튼으로 결과를 전환하세요.

01 기본 구성

SyInputNumber는 숫자 필드입니다.

Qt 실행 화면 · 이미지
기본 구성 · 기본
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height

    property QtObject settings: QtObject {
        id: storyArgs
        property string label: "수량"
        property real value: 1
        property real min: 0
        property real max: 100
        property real step: 1
        property int decimalPlaces: -1
        property string rounding: "round"
        property string size: "medium"
        property string status: "default"
        property bool required: false
        property bool disabled: false
        property bool readonly: false
        property bool borderless: false
        property string message: ""
    }

    

    SyInputNumber {
        label: storyArgs.label
        value: storyArgs.value
        min: storyArgs.min
        max: storyArgs.max
        step: storyArgs.step
        decimalPlaces: storyArgs.decimalPlaces
        rounding: storyArgs.rounding
        size: storyArgs.size
        status: storyArgs.status
        required: storyArgs.required
        disabled: storyArgs.disabled
        readonly: storyArgs.readonly
        borderless: storyArgs.borderless
        message: storyArgs.message
        onValueChanged: if (typeof value === "number" && storyArgs.value !== value) storyArgs.value = value
    }

}

02 min · max · step

min, max, step이 스텝의 범위를 정하고 검사를 정의합니다.

Qt 실행 화면 · 이미지
min · max · step · 기본
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height
    // Focused Gallery routes: keep only the selected API and its prerequisites.
    id: featureStory

    property QtObject settings: QtObject {
        id: storyArgs
        property real min: 0
        property real max: 10
        property real step: 2
    }

    

    SyInputNumber { id: featureTarget0; label: "수량"; value: 4; min: storyArgs.min; max: storyArgs.max; step: storyArgs.step }
}

03 decimalPlaces · rounding

decimalPlaces와 rounding은 사용자가 필드를 떠날 때와 스텝할 때마다 숫자를 정리합니다 — 입력 중에는 하지 않습니다.

Qt 실행 화면 · 이미지
decimalPlaces · rounding · 기본
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height
    // Focused Gallery routes: keep only the selected API and its prerequisites.
    id: featureStory

    property QtObject settings: QtObject {
        id: storyArgs
        property int decimalPlaces: 2
        property string rounding: "round"
    }

    

    SyInputNumber { id: featureTarget0; label: "가격"; value: 19.999; step: 0.05; decimalPlaces: storyArgs.decimalPlaces; rounding: storyArgs.rounding }
}

04 size · disabled · readonly · status

size는 입력처럼 상자 높이와 글자 크기를 정합니다(24 · 32 · 40 px).

Qt 실행 화면 · 이미지
size · disabled · readonly · status · 기본
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height
    // Focused Gallery routes: keep only the selected API and its prerequisites.
    id: featureStory

    Column {
        spacing: 12
        SyInputNumber { id: featureTarget0; visible: true; value: 1; size: "small" }
        SyInputNumber { id: featureTarget1; visible: true; value: 1; size: "large" }
        SyInputNumber { id: featureTarget2; visible: true; value: 1; disabled: true }
        SyInputNumber { id: featureTarget3; visible: true; value: 1; readonly: true }
        SyInputNumber { id: featureTarget4; visible: true; value: 1; status: "error" }
    }
}

05 changed · focused · blured

필드에는 시그널이 셋 있습니다.

Qt 실행 화면 · 이미지
changed · focused · blured · 기본
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    component EventLog: Rectangle {
        id: logBox
        property var lines: []
        implicitWidth: 440
        implicitHeight: Math.max(56, logText.implicitHeight + 24)
        radius: 4; color: Theme.semantic.backgroundBold
        function log(value) { lines = lines.slice(-3).concat([String(value)]) }
        Text {
            id: logText; x: 12; y: 12; width: parent.width - 24
            text: logBox.lines.length ? logBox.lines.join("\n") : "컨트롤을 조작하면 이벤트 결과가 표시됩니다."
            wrapMode: Text.Wrap; color: Theme.semantic.textDefault
            font.family: Theme.monoFontFamily; font.pixelSize: 12
        }
    }

    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height
    // Focused Gallery routes: keep only the selected API and its prerequisites.
    id: featureStory

    

    Column {
        spacing: 12
        SyInputNumber {
            label: "수량"; value: 1; min: 0; max: 5
            onChanged: (detail) => { if (true) { output.log(("changed: %1 (valid: %2)").arg(detail.value).arg(detail.isValid)) } }
            onFocused: (detail) => { if (true) { output.log("focused") } }
            onBlured: (detail) => { if (true) { output.log(("blured: status %1").arg(detail.status)) } }
        }
        EventLog { id: output }
    }
}

06 stepUp · stepDown · setClear

숫자 필드는 공통 함수에 셋을 더합니다.

Qt 실행 화면 · 이미지
stepUp · stepDown · setClear · 기본
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height
    // Focused Gallery routes: keep only the selected API and its prerequisites.
    id: featureStory

    Column {
        spacing: 12
        SyInputNumber { id: qty; label: "수량"; value: 1; min: 0; max: 20 }
        Flow {
            width: 560
            spacing: 8
            SyButton { id: exampleControl1;  visible: true; text: "qty.stepUp()"; variant: "secondary"; size: "small"; onClicked: qty.stepUp() }
            SyButton { id: exampleControl2;  visible: true; text: "qty.stepUp(5)"; variant: "secondary"; size: "small"; onClicked: qty.stepUp(5) }
            SyButton { id: exampleControl3;  visible: true; text: "qty.stepDown()"; variant: "secondary"; size: "small"; onClicked: qty.stepDown() }
            SyButton { visible: true; text: "qty.setClear()"; variant: "secondary"; size: "small"; onClicked: qty.setClear() }
            SyButton { visible: true; text: "qty.setFocus()"; variant: "secondary"; size: "small"; onClicked: qty.setFocus() }
        }
        Text {
            text: "qty.value === " + JSON.stringify(qty.value) + "   qty.number === " + JSON.stringify(qty.number)
            font.family: Theme.monoFontFamily
            font.pixelSize: 12
            color: Theme.semantic.textSubtle
        }
    }
}

07 소수점 정밀도

value · decimalPlaces · step 설정을 적용한 소수점 정밀도 예제입니다.

Qt 실행 화면 · 이미지
소수점 정밀도 · 실행 결과
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height

    property QtObject settings: QtObject {
        id: storyArgs
        property string label: "수량"
        property real value: 12.345
        property real min: 0
        property real max: 100
        property real step: 0.01
        property int decimalPlaces: 2
        property string rounding: "round"
        property string size: "medium"
        property string status: "default"
        property bool required: false
        property bool disabled: false
        property bool readonly: false
        property bool borderless: false
        property string message: ""
    }

    

    SyInputNumber {
        label: storyArgs.label
        value: storyArgs.value
        min: storyArgs.min
        max: storyArgs.max
        step: storyArgs.step
        decimalPlaces: storyArgs.decimalPlaces
        rounding: storyArgs.rounding
        size: storyArgs.size
        status: storyArgs.status
        required: storyArgs.required
        disabled: storyArgs.disabled
        readonly: storyArgs.readonly
        borderless: storyArgs.borderless
        message: storyArgs.message
        onValueChanged: if (typeof value === "number" && storyArgs.value !== value) storyArgs.value = value
    }

}

08 수량 범위 제한

min · max · step · value 설정을 적용한 수량 범위 제한 예제입니다.

Qt 실행 화면 · 이미지
수량 범위 제한 · 실행 결과
기본 실행 화면
QML 코드
import QtQuick
import Syidax.Core

Item {
    implicitWidth: Math.max(360, childrenRect.width)
    implicitHeight: childrenRect.height

    property QtObject settings: QtObject {
        id: storyArgs
        property string label: "수량"
        property real value: 6
        property real min: 2
        property real max: 20
        property real step: 2
        property int decimalPlaces: -1
        property string rounding: "round"
        property string size: "medium"
        property string status: "default"
        property bool required: false
        property bool disabled: false
        property bool readonly: false
        property bool borderless: false
        property string message: ""
    }

    

    SyInputNumber {
        label: storyArgs.label
        value: storyArgs.value
        min: storyArgs.min
        max: storyArgs.max
        step: storyArgs.step
        decimalPlaces: storyArgs.decimalPlaces
        rounding: storyArgs.rounding
        size: storyArgs.size
        status: storyArgs.status
        required: storyArgs.required
        disabled: storyArgs.disabled
        readonly: storyArgs.readonly
        borderless: storyArgs.borderless
        message: storyArgs.message
        onValueChanged: if (typeof value === "number" && storyArgs.value !== value) storyArgs.value = value
    }

}

09 필수 입력과 초기화

검증 전·오류 표시·초기화 결과를 비교합니다.

Qt 실행 화면 · 이미지
필수 입력과 초기화 · 입력 전
QML 코드
import QtQuick
import Syidax.Core

Column {
    width: 440; spacing: 12
    SyInputNumber {
        id: field; width: parent.width; name: "selection"; required: true
        label: "필수 입력"; min: 1; max: 20
        
        error: "계속하려면 이 항목을 입력하세요."
    }
    Row {
        spacing: 8
        SyButton { id: check; text: "검증"; onClicked: field.reportValidity() }
        SyButton { id: reset; text: "초기화"; onClicked: field.reset() }
    }
    Text { text: "상태: " + (field.invalid ? "오류" : "입력 준비"); color: Theme.semantic.textDefault }
}

10 사용자 지정 오류

업무 규칙에 맞는 오류를 표시하고 초기화합니다.

Qt 실행 화면 · 이미지
사용자 지정 오류 · 입력 전
QML 코드
import QtQuick
import Syidax.Core

Column {
    width: 440; spacing: 12
    SyInputNumber {
        id: field; width: parent.width; name: "selection"; required: true
        label: "필수 입력"; min: 1; max: 20
        value: 5
        error: "현재 사용할 수 없는 선택입니다. 다른 값을 선택하세요."
    }
    Row {
        spacing: 8
        SyButton { id: check; text: "오류 표시"; onClicked: field.setCustomError() }
        SyButton { id: reset; text: "초기화"; onClicked: field.reset() }
    }
    Text { text: "상태: " + (field.invalid ? "오류" : "입력 준비"); color: Theme.semantic.textDefault }
}

API 94

항목을 가리키거나 선택하면 QML 예제와 복사 버튼이 나타납니다.

속성

항목동작 / 조건
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.
공통 필드 속성(name, label, required, disabled, size, message, error, touched, submitted, customError, validStatus, valid, invalid, preferredWidth, showTitle, ready)은 Form 페이지에 설명되어 있습니다.

속성

속성타입기본값설명
number | string""숫자. 비어 있으면 "", 숫자가 아닌 동안에는 원문(→ typeMismatch). 대입하면 changed가 발생합니다.
real-9007199254740991하한. 스텝이 여기서 멈추고, 입력한 더 작은 값은 rangeUnderflow이며, 설정되어 있으면 스텝 격자가 여기서 시작합니다.
real9007199254740991상한. 스텝이 여기서 멈추고, 입력한 더 큰 값은 rangeOverflow입니다.
real1한 스텝이 더하는 양. stepMismatch의 격자이기도 합니다. 소수 스텝도 됩니다.
int-1정리(블러 / 스텝)할 때 소수점 아래 유지할 자릿수. -1 = step이나 값이 필요한 만큼.
string""round(기본값, ""도 같음) · ceil · floor — 정리할 때 남는 자릿수를 버리는 방식.
string""필드가 비어 있는 동안 표시.
string""상자 위 제목
string""도움말 줄
string""사용자 정의 오류 문구
string""소속 SyForm의 키.
string"medium"small 24 · medium 32 · large 40 px 높이.
string"default"default · warning · error · success — 검증과 무관한 색조.
boolfalse빈 필드 → valueMissing. * 표시를 더합니다.
boolfalse반응 없음, 항상 유효, 제출되지 않음. 스테퍼 꺼짐.
boolfalse포커스와 선택은 되지만 타이핑·스텝은 안 됨. 항상 유효하며 제출됩니다.
boolfalse상자가 포커스되거나 무효가 되기 전까지 테두리 없음.
boolfalse필드가 만들어지자마자 상자에 포커스.
Item 목록—텍스트 앞의 아이템
Item 목록—뒤(스테퍼 열 앞)의 아이템.
number | null(읽기 전용)—해석된 값. 비어 있거나 숫자가 아니면 null.
bool(읽기 전용)—필드가 비어 있음(value가 "").
bool(읽기 전용)—지금 그 방향으로 스텝할 수 있는지(활성, 읽기 전용 아님, 한계 아님).
bool(읽기 전용)—지금 그 방향으로 스텝할 수 있는지(활성, 읽기 전용 아님, 한계 아님).
bool(읽기 전용)—상자가 활성 포커스를 가짐
bool(읽기 전용)—포인터가 위에 있음.
읽기 전용—테두리가 보이는지, 그리고 현재 색조.
읽기 전용—테두리가 보이는지, 그리고 현재 색조.

메서드

메서드설명
value + n × step(n 기본값 1), max로 클램프, 정리. disabled·readonly이거나 이미 max이면 무시. 빈 필드는 0에서 스텝.
value − n × step, min으로 클램프, 정리. 같은 전제 조건, min 기준.
필드를 비움: value = "", 상자 비움, value: null로 changed. readonly·disabled에서도 동작.
상자에 포커스 / 해제. 블러는 숫자를 정리하고 touched를 설정.
상자에 포커스 / 해제. 블러는 숫자를 정리하고 touched를 설정.
상태가 ""이면 true. 화면 변화 없음.
같은 결과, 그리고 이제부터 오류 줄이 보임.
custom 상태 강제 / 해제(오류가 즉시 보임).
custom 상태 강제 / 해제(오류가 즉시 보임).
"" · valueMissing · typeMismatch · rangeUnderflow · rangeOverflow · stepMismatch · custom.
초기값으로. touched·보고·custom 플래그를 지움.

시그널

시그널인자발생 시점
detail: { value: number | null, isValid: bool, status: string }로딩 뒤 value가 바뀜 — 키 입력, 스텝, 블러 정리, setClear(), 코드의 대입. 초기값에는 발생하지 않음.
같음상자가 활성 포커스를 얻음.
같음상자가 포커스를 잃음. 숫자가 정리되고 touched가 설정된 뒤.

동작

항목동작 / 조건
숫자. 비어 있으면 "", 숫자가 아닌 동안에는 원문(→ typeMismatch). 대입하면 changed가 발생합니다.
해석된 값. 비어 있거나 숫자가 아니면 null.
필드가 비어 있음(value가 "").
로딩 뒤 value가 바뀜 — 키 입력, 스텝, 블러 정리, setClear(), 코드의 대입. 초기값에는 발생하지 않음.
value + n × step(n 기본값 1), max로 클램프, 정리. disabled·readonly이거나 이미 max이면 무시. 빈 필드는 0에서 스텝.
value − n × step, min으로 클램프, 정리. 같은 전제 조건, min 기준.
한 스텝이 더하는 양. stepMismatch의 격자이기도 합니다. 소수 스텝도 됩니다.
하한. 스텝이 여기서 멈추고, 입력한 더 작은 값은 rangeUnderflow이며, 설정되어 있으면 스텝 격자가 여기서 시작합니다.
상한. 스텝이 여기서 멈추고, 입력한 더 큰 값은 rangeOverflow입니다.
반응 없음, 항상 유효, 제출되지 않음. 스테퍼 꺼짐.
포커스와 선택은 되지만 타이핑·스텝은 안 됨. 항상 유효하며 제출됩니다.
number ≥ max이면 ▲가, number ≤ min이면 ▼가 회색이 되어 반응하지 않고, disabled나 readonly이면 둘 다 그렇습니다(canStepUp / canStepDown).
number ≥ max이면 ▲가, number ≤ min이면 ▼가 회색이 되어 반응하지 않고, disabled나 readonly이면 둘 다 그렇습니다(canStepUp / canStepDown).
custom(setCustomError() 뒤).
빈 필드 → valueMissing. * 표시를 더합니다.
오류 줄(기본 문구 또는 error)은 필드가 invalid가 된 뒤 — 블러(touched) 또는 reportValidity()(submitted) 뒤 — 보이고, 그동안 message는 숨겨집니다.
오류 줄(기본 문구 또는 error)은 필드가 invalid가 된 뒤 — 블러(touched) 또는 reportValidity()(submitted) 뒤 — 보이고, 그동안 message는 숨겨집니다. disabled > readonly > invalid > status(warning · error · success) > focus > hover > enabled.
오류 줄(기본 문구 또는 error)은 필드가 invalid가 된 뒤 — 블러(touched) 또는 reportValidity()(submitted) 뒤 — 보이고, 그동안 message는 숨겨집니다. 떠나면 숫자를 정리하고 touched를 설정하며 blured를 발생시킵니다.
같은 결과, 그리고 이제부터 오류 줄이 보임.
오류 줄(기본 문구 또는 error)은 필드가 invalid가 된 뒤 — 블러(touched) 또는 reportValidity()(submitted) 뒤 — 보이고, 그동안 message는 숨겨집니다.
오류 줄(기본 문구 또는 error)은 필드가 invalid가 된 뒤 — 블러(touched) 또는 reportValidity()(submitted) 뒤 — 보이고, 그동안 message는 숨겨집니다.
정리(블러 / 스텝)할 때 소수점 아래 유지할 자릿수. -1 = step이나 값이 필요한 만큼.
round(기본값, ""도 같음) · ceil · floor — 정리할 때 남는 자릿수를 버리는 방식.
default · warning · error · success — 검증과 무관한 색조.
disabled > readonly > invalid > status(warning · error · success) > focus > hover > enabled.
disabled > readonly > invalid > status(warning · error · success) > focus > hover > enabled.
상자가 포커스되거나 무효가 되기 전까지 테두리 없음.
상자가 활성 포커스를 얻음.
상자가 포커스를 잃음. 숫자가 정리되고 touched가 설정된 뒤.
disabled는 포커스·타이핑·스텝을 막고 SyForm.values()에서 필드를 건너뜁니다.
width를 정하지 않으면 240 px 너비이고, 상자는 size에 따라 24 · 32 · 40 px 높이입니다.
small 24 · medium 32 · large 40 px 높이.
상자 안은 왼쪽에서 오른쪽으로 prefix 아이템, 텍스트, suffix 아이템, 그다음 16 px 스테퍼 열(▲ 위에 ▼, 각각 절반 높이)입니다.
상자 안은 왼쪽에서 오른쪽으로 prefix 아이템, 텍스트, suffix 아이템, 그다음 16 px 스테퍼 열(▲ 위에 ▼, 각각 절반 높이)입니다.
색은 Theme.inputNumber에서 오고 Theme.scheme을 따릅니다.

키보드

항목동작 / 조건
키보드: Tab과 Shift+Tab으로 필드에 진입하고 이동합니다. 숨김·비활성 필드는 건너뜁니다. 열린 선택기는 Escape로 닫을 수 있습니다. Textarea의 Tab은 들여쓰기 대신 포커스를 이동하며 Modal 안에서는 포커스 경계를 유지합니다.