Exceptions Behandlung
-
Hallo,
ich möchte 6 verschieden Eingabedialoge mit einer Exceptions Abfangen,
ist dieses möglich? Es soll auch bei jeder Exceptions der focus richtig gesetzt sein.//die Daten aus dem Formular übernehmen modell->setData(modell->index(zeile, 1), ui->lineEditVorname->text()); modell->setData(modell->index(zeile, 2), ui->lineEditName->text()); modell->setData(modell->index(zeile, 3), ui->lineEditStrasse->text()); modell->setData(modell->index(zeile, 4), ui->lineEditPLZ->text()); modell->setData(modell->index(zeile, 5), ui->lineEditOrt->text()); modell->setData(modell->index(zeile, 6), ui->lineEditTelefon->text()); //die Änderungen übernehmen modell->submitAll();
//die Slots void KundeNeu::check() { bool ausnahme = false; try{ QString zahl1 = ui->lineEditVorname->text(); if(zahl1.isEmpty()){ ausnahme = true; throw 1; } }catch (int e) { QMessageBox::information(this, "Fehler", "Der Vorname wurde nicht eingeben."); ui->lineEditVorname->setFocus(); } if(ausnahme == false) speichern(); }
-
…warum willst Du das unbedingt mit exceptions abfangen? Es nützt wenig, wenn Du innerhalb einer Methode die exception selbst auslöst und direkt danach abfängst. Du kannst die Fehlerbehandlung an der Stelle durchführen, wo Du die exception auslöst und Dir den Umweg über die exception sparen. Zudem fragst Du den Parameter der exception (int) im catch Statement gar nicht ab, er ist mithin redundant.
-
Danke schön, für die Antworten und die Tipps, ich wollte es deswegen mit einer exceptions abfangen, damit ich prüfen kann das beim Anlegen auch wirklich alle erforderlichen Daten eingegeben worden sind. Dies wollte ich vor den Speichern der Daten durchführen. Um diese Problem abzufangen, wollte ich es mit Try und Catch lösen, weil es wird die exceptions ja solange eingelöst bist wirklich etwas eintragen worden ist.
-
@M-W43 Dafür brauchst du keine Exceptions. Einfaches if() reicht ja schon. Außerdem benutzt man Exceptions normallerweise nicht um sie unmittelbar nach dem Werfen abzufangen. Wozu auch?
void KundeNeu::check() { QString zahl1 = ui->lineEditVorname->text(); if(zahl1.isEmpty()){ ui->lineEditVorname->setFocus(); return; } speichern(); }
Ist doch viel einfacher und klarer, oder?
-
...auch den Umweg über zahl1 (seltsamer Name für einen String) kannst Dir sparen:
if (ui->lineEditVorname->text().isEmpty()) return ui->lineEditVorname->setFocus();
...und Du stellst bestimmt über einen Validator sicher, dass der Vorname keinen Topfen enthält wie zB ".,+# /*- ".
-
if (ui->lineEditVorname->text().simplified().isEmpty()) { return ui->lineEditVorname->setFocus(); }