Error herausfinden
-
Hallo liebe Community,
ich stehe leider vor einem kleinen Problem. In meinem Programm was ich geschrieben habe werden aus einem Textfeld die Eingabe in Variablen geschrieben. Der Part sieht wie folgt aus:
const QString eingabe(ui->qr_scanner->text()); QStringList listeingabe = eingabe.split('/'); QString eingabehaus = listeingabe.at(0); QString eingabeeg = listeingabe.at(1); QString eingabenr = listeingabe.at(2);
qr_scanner ist das Textfeld. Die Eingabe in das Textfeld sollte nach dem Muster "xxxx/xxxx/xxxx" geschehen (hier wird der Inhalt eines QR-Codes eingelesen).
Jetzt ist aber das Problem, wenn der Nutzer etwas manuell eingibt und es nicht dem Muster entspricht, stürzt das Programm ab, was zwar richtig ist, aber ich würde aber gerne etwas dafür schreiben, dass es nicht abstürzt sondern in ein Label oder ähnliches schreibt "Das war falsch" oder so ähnlich.
Ich dachte hierfür an ein Try/Catch, aber mein Problem ist, das ich nicht weiß wie der Fehler heißt. Wenn es abstürzt, kommt bei "Application Output" nur folgendes:Starting C:\%Dateipfad%\build-tuerpruefung-Desktop_Qt_5_8_0_MSVC2015_64bit-Release\release\tuerpruefung.exe... The program has unexpectedly finished. C:\%Dateipfad%\build-tuerpruefung-Desktop_Qt_5_8_0_MSVC2015_64bit-Release\release\tuerpruefung.exe crashed.
Ich hatte es schon mit einem catch(...) probiert, aber das Programm stürzt trozdem ab.
Hat jemand eine Idee wie ich das anders Lösen könnte bzw. wie ich das mit Try/Catch machen könnte?
Ich benutze Qt Creator 4.2.1 based on Qt 5.8.0 und Windows 10.
Ich hoffe mir kann jemand helfen und dass ich alles verständlich Beschrieben habe.
Mit freundlichen Grüßen
marc20031 -
Das Problem ist, das du auf Indizes der listeingabe zugreifts, die es nicht zwangsläufig geben muss. Gibt der Benutzer z.B. "Hallo das ist ein Test" ein, enthält die QStringList nur ein Element. Der Zugriff auf
at(1)
führt dann zum Fehler.
Ich würde in diesem Fall gar nicht mit try catch-Blöcken arbeiten, sondern eine einfache Abfrage folgender Form einfügen:const QString eingabe(ui->qr_scanner->text()); QStringList listeingabe = eingabe.split('/'); if(listeingabe.size() > 2) { QString eingabehaus = listeingabe.at(0); QString eingabeeg = listeingabe.at(1); QString eingabenr = listeingabe.at(2); } else { // ui-labelEroor->setText("Falsche Eingabe"); }
-
Wenn Du gar nicht erst möchtest, dass eine falsche Eingabe stattfindet, wäre der QRegExpValidator vielleicht etwas für Dich.