Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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.



  • Axel hat recht. Exceptions sind nicht noetig in diesem Fall.



  • 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.


  • Lifetime Qt Champion

    @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?



  • Vielen danke habe gerade ausprobiert, und es funktioniert.



  • ...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 ".,+# /*- ".



  • @AxelVienna

    if (ui->lineEditVorname->text().simplified().isEmpty()) {
         return ui->lineEditVorname->setFocus();
    }
    

Log in to reply