Wpis z mikrobloga

Mirasy, jak walidować TextFieldy w qml? Mam forma, takiego jak na załączonym obrazku. Chciałbym zrobić tak, że jeżeli TextField jest pusty lub występuje błąd przy walidacji przycisk Akceptuj nie pojawia się. W jaki sposób mogę to uzyskać? Póki co napisałem coś takiego: https://pastebin.com/E9buhbEv . W doc dotyczących qt quick jest strasznie mało odnośnie walidacji.

Z góry dziękuje Mirony za pomoc.

#cpp #qt5 #qt #naukaprogramowania
GaHee - Mirasy, jak walidować TextFieldy w qml? Mam forma, takiego jak na załączonym ...

źródło: comment_3ffMu9ldjSdcviWkK9SMO82Peb4m4Mc7.jpg

Pobierz
  • 6
  • Odpowiedz
@GaHee: O widzę że Qt Quick Controls 2, prawidłowo ( ͡° ͜ʖ ͡°).

Ja robię tak że opakowuję TextFielda jakiś komponent i dorabiam przykładowo tam taką metodę:

function check() {
    if(text=="") {
        blinkRed.start();

        ToolTip.show(qsTr("This field cannot be empty."));
        forceActiveFocus();
        return false;
    }
    return true;
}
Potem lecę po liście i odpalam wszystkim po kolei check() w bindingu:

acceptButton.enable: nameField.check()&&surnameField.check()&&emailField.check()
!blinkRed to SequentialAnimation na textField.background.color czy coś takiego.
  • Odpowiedz
@lionbest: Cześ Mirku. Kolejny raz wielkie dzięki za pomoc. Nie do końca rozumiem o co chodzi z pakowaniem TextFieldu w Component. Masz może jakiś pełny kawałek kodu, który pokazuje o co chodzi z tym pakowaniem?
  • Odpowiedz
@GaHee: Masz tam 4 pola więc pakujesz TextField w plik MyTextField.qml aby korzystać z MyTextField w którym możesz mieć dodatkowe metody i właściwości, tutaj może zły przykład przydałem, ale wykonanie metody javascriptowej w bindingu która korzysta z innych właściwości spowoduje automatyczne przypięcie tak jak zwykłe bindingi.
Do kontrolowania co w TextField można wpisywać można użyć walidatora, przykładowo dla literek (w tym Unicode):
   validator: RegExpValidator {

     regExp: /[^\000-\037\041-@]+/
   }
  • Odpowiedz
Dzięki @lionbest poradziłem sobie. Z blinkRed() nie dałem rady, bo kompletnie nie mam pomysłu jak to zrobić, ale regex ładnie działa, toolTip wyskakuje, przycisk się blokuje(fajną animację zaimplementowali). Wincyj takich mirków!
  • Odpowiedz
@GaHee: No ja mam to jeszcze zrobione w GroupBox i całym group box migam a miganie jest trywialne:

SequentialAnimation {
        id:blinkRed
        ColorAnimation {
            target: background.border
            property: "color"
            to: "red"
            duration:500
        }
        PauseAnimation {
            duration: 4000
        }
        ColorAnimation {
            target: background.border
            property: "color"
            to: "black"
            duration:500
        }
    }

Jeszcze można użyć SequentialAnimation.loops by parę razy mignęło.
  • Odpowiedz