Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Validierung in Qt ?



Overlord04
08-12-2004, 12:43
Mahlzeit :)

Habe mal wieder ein Problem:
Ist es möglich für lineEdits ne Art Validierung so einfachst wie möglich zu realisieren ? Sprich z.B. keine Umlaute zulassen, oder nur Zahlen.
Hatte mich schon gefreut, wo ich die InputMask im Designer gesehen habe, aber leider zu früh gefreut. Sie trägt ihren Namen zu recht. Ne reine Maske und keine Flexibilität, so wie ich in der qt-doku gesehen habe.
Nichts mit Umlauten ausschließen :(

Hat vielleicht einer ne Idee für mich in Bezug auf ne Validierungsmöglichkeit ?

Gruss :) und danke im Voraus

Boron
08-12-2004, 13:14
Du könntest dir da was mit QRegExp basteln.

Evtl. das Signal textChanged abfangen und daraufhin mit Hilfe der QRegExp die unerlaubten Zeichen rauswerfen?

anda_skoa
08-12-2004, 18:47
Oder mal einen Blick auf die Doku von QLineEdit::setValidator und QValidator werfen :)

Ciao,
_

Overlord04
10-01-2005, 02:57
Habe jetzt den QValidator benutzt. Mein Quelltext sieht folgendermaßen aus:



...
QRegExp rx( "[1-9]\\d{0,3}" );

QRegExpValidator v( rx, 0 );
int pos = 0;

if(v.validate(numberString, pos)=='Acceptable'){
...


So... normalerweise ist z.B. die Eingabe für numberString "1" gültig, "1234" wäre ungültig, trotzdem funktioniert die if-Abfrage bei beiden Fällen nicht, woran liegt das ?
Wahrscheinlich ist der Rückgabewert ja ein State als enum Acceptable, nur wie sieht dann die If-Abfrage aus ?

Danke im Voraus :)

Gruss

anda_skoa
10-01-2005, 17:28
Wahrscheinlich ist der Rückgabewert ja ein State als enum Acceptable, nur wie sieht dann die If-Abfrage aus ?


Ja, das ist das Problem ;)
Ein Wert in einem Enum ist wie eine Konstante Integerzahl, also sieht die if Abfrage genau so aus, als wäre Acceptable ein const int

Aber ansich brauchst du das nicht explizit aufzurufen, QLineEdit kann das schon von sich aus, es muss nur wissen, welchen Validator es benutzen soll.

Ciao,
_

BlueJay
10-01-2005, 18:43
Habe jetzt den QValidator benutzt. Mein Quelltext sieht folgendermaßen aus:



...
QRegExp rx( "[1-9]\\d{0,3}" );



So... normalerweise ist z.B. die Eingabe für numberString "1" gültig, "1234" wäre ungültig,
Gruss

Porquoi?

Du lässt durch:
1. eine Zahl/Ziffer von 1 bis 9,
2. danach 0 bis 3 Ziffern.

Damit ist 1234 gültig.

QLine Edit passt übrigens auf, dass korrekt eingegeben wird. Eine weitere Abfrage ist damit überflüssig.


Back to the roots:

1. Es gibt ein QIntValidator, mit dem kann man wunderschön auf einen Integer-Bereich beschränken, z.B. 1 - 9999. Um die Eingabebegrenzung kümmert sich dann das QLineEdit voll und ganz ohne weiteres Zutun. Der ganze Kram ist dann nur ein Zweizeiler.

2. Bei Zeichen kannst du brav den Bereich [A-Z] und [a-z] eingeben, wenn die Umlaute ausgeklammert werden sollen, ebenfalls nur ein Zweizeiler.

so long

p.s. Wenn du der Overlord von dem Moorhuhnforum bist, die Schafe gibt es jetzt unter GPL bei kde-apps.org zum Download (other games, sheep). Da findest du auch ein Beispiel für die Validatoren in l_window.cpp ab Zeile 54.

nela
25-01-2005, 08:39
Hallo, ich habe ein ähnliches Problem:
ich habe ein LineEdit-Feld, dem ich sagen möchte, dass man nur Ziffern eingeben darf, sogar nur positive (in einem zweiten auch negative), und das auf 4 Ziffern begrenzt.
Das ganze habe ich allerdings mit Qt-Designer erstellt, es existiert also nur der ui-File und der ui.h-File.
Wo muss ich meinen Validator den reinschreiben? Einfach ins ui.h? Und wie muss der aussehen? Ich habe bis jetzt leider nur Beispiele gefunden, mit denen ich nicht so viel anfangen konnte :confused:

Wenn mir jemand einen Beispielcode geben könnte (ich glaub es wär ja nicht viel), ich wäre sehr sehr dankbar ;)

vielen Dank schon mal

Nela