Eingaben in QLineEdit filtern
-
Hallo liebes Forum, ich versuche gerade die Eingaben des Users in einer QLineEdit sinnvoll zu filtern, damit später in der Datenbank kein "Quatsch" steht, aber das gelingt mir aktuell bestenfalls mittelgut. Mein Ansatz ist der Versuch mittels QValidator das gewünschte Ergebnis zu erreichen:
[CODE]
#define BUCHSTABEN "([A-ZÄÜÖa-zäüöß]{1,15}[\s\'-][\s\][A-Za-zäüöß]{1,15}[.]{1,1})"
...
const QRegularExpression regxprLetters(BUCHSTABEN);
MyRegXprValidator *validLetters = new MyRegXprValidator(regxprLetters,this);
ui->lastNameLineEdit->setValidator(validLetters);
[/CODE]
Das funktioniert auch insgesamt gut so. Allerdings möchte ich den eingegebenen Text nach Verlassen des QLineEdit Felds nochmal prüfen und ggf. korrigieren, dass der erste Buchstabe groß geschrieben ist und auch der Buchstabe nach einem Sonderzeichen. Das Problem ist nun a) dass das zwar auch über die Eingabemaske möglich ist, aber dann bei "falscher" Eingabe einfach nichts da steht, der Buchstabe also weggefiltert wird und der Nutzer ständig Blickkontakt mit der Eingabemaske halten muss und andererseits b) die Eventbehandlung durch den Eingabefilter geblockt wird, sodass eine nachträgliche Bearbeitung des Texts auch nicht ohne Weiteres möglich ist. Ich hatte erst gedacht dies sei ein Bug, aber in der Dokumentation steht, dass das so sein soll und es gäbe die Möglichkeit dieses Verhalten über eine "fixedup()" - Funktion zu beheben. Leider ist mein Programmierverständnis nicht gut genug um das zu lösen. Darüber hinaus finde ich dieses Verhalten höchst eigenartig und eher kontraproduktiv. Ich habe bereits eine Lösung für ein ähnlich gelagertes Problem im Internet gefunden konnte das Beispiel aber nicht für meinen Zweck anpassen. Weiß jemand Rat? -
Mit so etwas habe ich mich zwar noch nicht so recht beschäftigt, aber wie wäre es, den Text bereits bei der Eingabe zu prüfen. Die ganze Definition vorher weg lassen und eines der Signale abfangen. Bei einem dieser Signale wird sogar die alte und neue Position mit angegeben. Der String läßt sich dann doch sehr leicht prüfen und korregieren. Auch ein nochmaliges prüfen nach erfolgter Eingabe sollte dann kein Problem mehr darstellen. Etwas besseres fällt mir dazu nicht ein.