1

テキスト フィールドのグループが入力され、正規表現で検証されたときにのみ、1 つのボタンを有効にしたいと考えています。Web登録フォームで考えると、QMLアプリケーションでも同じ動作が必要です。もちろん、JS コードを使用してそれが可能であることは知っていますが、私の目標はそれを使用することではなく、宣言型の qml コードのみを使用してエレガントな方法でこれを行うことです。何かアイデアはありますか?

これは例です:

Label {
    text: qsTr('First name')
}

TextField {
    id: firstNameTextField
}

Label {
    text: qsTr('Last name')
}

TextField {
    id: lastNameTextField
}

Label {
    text: qsTr('email')
}

// Username
TextField {
    id: emailTextField
    placeholderText: qsTr("Enter email")
    smooth: true
    validator: RegExpValidator{ regExp: /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i }
}

Label {
    text: qsTr('Password')
}

TextField {
    id: passwordTextField
}

Label {
    text: qsTr('Re-Password')
}

TextField {
    id: rePasswordTextField
}
Button {
    id:button
    enabled: // all text fields completed and validated
}
4

2 に答える 2

3

以下は、宣言的な方法でコーディングされた同じソリューションです。

Row {
    TextField {
        id: field1
        placeholderText: qsTr("Enter number 1")
        validator: IntValidator {bottom: 1; top: 9;}
    }
    TextField {
        id: field2
        placeholderText: qsTr("Enter number 2")
        validator: IntValidator {bottom: 11; top: 19;}
    }
    Button {
        id: btn
        text: "Send"
        enabled: field1.acceptableInput && field2.acceptableInput
    }
}

Qtドキュメントから:

AcceptableInput - テキスト フィールドに許容可能なテキストが含まれている場合は true を返します。バリデーターまたは入力マスクが設定されている場合、現在のテキストが最終的な文字列としてバリデーターまたはマスクを満たす場合、このプロパティは true を返します。

于 2016-11-22T12:33:35.630 に答える
0

これは、それを行う簡単で汚い方法です。
以下のようにボタンを有効にするための中間としてブール値のプロパティを使用します

Item{
property bool isNameFieldValid : false
property bool isAgeFieldValid : false

TextField {
    id: name
    placeholderText: qsTr("Enter name")
    validator:  RegExpValidator{regExp:"valid JS regEx"}
    onAccepted:isNameFieldValid=true
 }
TextField {
    id: age
    placeholderText: qsTr("Enter name")
    validator:  RegExpValidator{regExp:/[0-9A-F]+/}
    onAccepted:isAgeFieldValid=true
 }
Button{
 id:confirmButton
  enable:isNameFieldValid && isAgeFieldValid
 }
}

ただし、唯一のことは、ユーザーがキーボード/キーパッドの Enter キーをクリックした場合にのみフィールドが検証されることです。

于 2016-11-22T11:26:15.680 に答える