-
user input überprüfen
Hallo,
wie kann ich denn einfach den user input in einem labeledit feld einfach darauf prüfen dass es sich nur um einen int/float handelt ...
also falls das feld leer ist oder ein zeichen ist dann sollte eine meldung kommen...
danke
-
Hallo Mat,
du kannst dafür QInputDialog benutzen. Dort erfolgt eine automatische Überprüfung, allerdings keine Fehlermeldung. Man kann dort nur Zahlen eingeben. Bei allen anderen Zeichen erscheint einfach gar nichts.
Falls du die Fehlermeldung unbedingt brauchst, benutze QValidator und QRegExp. Bei einem QLineEdit gibt es auch schon entsprechende Funktionen: hasAcceptableInput() und setValidator ( const QValidator * v ). Dann eine QMessage ausgeben, falls die Eingabe nicht ok ist.
Schöne Grüße,
-
ah ja ok......
mir ist nur unklar wie ich den return wert von validator benutzen kann....
denn er liefert ja acceptable, intermediate oder invalid
habe gelesen dass das widget dann von selbst aufpasst? Aber das tut es bei mir nicht obwohl die syntax stimmt ???
Geändert von Mat (07-11-2005 um 19:51 Uhr)
-
Hallo Mat,
beim QInputDialog passt das Fenster selber auf.
Ansonsten kannst du abtesten, ob valid oder invalid zurückgegeben wird. Bei valid ist die Eingabe ok, bei invalid nicht. Hier mal ein Beispiel:
connect( table, SIGNAL( valueChanged(int,int) ), this, SLOT( slotCheckEntry(int,int) ) );
Wenn also ein Wert geändert wird, wird der Slot zum Überprüfen aufgerufen.
// Diese Funktion testet die Eingabe in einer Tabelle
void MyWidget::slotCheckEntry( int i, int j )
{
QRegExpValidator validator( QRegExp("[abc]", true, false ),this, 0 );
QString entry = table->text( i, j ); // Eintrag in der Tabelle testen
int pos = 0; // nur die erste position testen, kann man ja anpassen
if( validator.validate( entry, pos ) == QValidator::Acceptable )
{
table->setText( i, j, entry.upper() ); // oder gar nichts, weil ja die Eingabe ok war
}
else
{
QMessageBox::warning ( this, "Wrong input", "This input is not allowed.\nPlease use one a,b or c", QMessageBox::Ok , 0, 0 );
table->clearCell( i, j ); // Zelle löschen
}
}
Als regulären Ausdruck kannst du dann entsprechend alle Ziffern eintragen. Am einfachsten ist aber wirklich QInputDialog.
Schöne Grüße,
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen