SetFocus() Verständnisproblem



  • Hallo,
    bietet mir SetFocus() die Möglichkeit im falle einer Falschen Eingabe diese zu Wiederholen?
    Bin gerade am ausprobieren was setFocus() überhaupt macht und welche Bedinungen ich brauche um es auszulösen.
    Habe mir 1 QLineEdit erstellt und möchte bei der Eingabe von 0 diese Eingabe abfangen, ich weiß das ich es im nachhinein noch mit try und catch verschachteln muss.

    Das ist erstmal der Anfang aber setFocus() zeigt keinerlei Funktion.

     zahl2 = locale().toFloat(ui->lineEdit_2->text());
        
    
        if (zahl2==0)
                {
                    QMessageBox::information(this, "Zahl2", "hat einen Null Wert Division durch Null geht nicht");
                    ui->lineEdit_2->setFocus();
                }
    


  • Bin mir nicht ganz sicher, was Du da machst.
    Wenn Du etwas abfangen lassen möchtest, schau die das Signal/Slot Konzept von Qt an (z.B. das Signal "textChanged"). Oder was wäre mit "setValidator(const QValidator *v)"?

    Ansonsten ist "QWidget::setFocus(...) in der Qt-Docu recht gut beschrieben.

    Und was willst Du in diesem Zusammenhang " im nachhinein noch mit try und catch verschachteln"?



  • @Helmut_Jakoby
    Ich habe die Doku schon gelesen das war mein erster Gedanke werde aber dadurch nicht schlauer!!
    Habe ein Taschenrechner Programmiert und möchte bei einer falschen Eingabe von einem Konvertierungsfehler oder einer Eingabe von Null diesen Eingabe abfangen.

    Habe eine Vermutung das ich auf das lineEdit keinen zugriff habe, und das dadurch setFocus() nicht ausgelöst wird. Wahrscheinlich muss ich einen Zeiger vereinbaren für das QLineEdit, aber in meiner Welt ist das lineEdit_2 schon ein Wigets.



  • Wahrscheinlich muss ich einen Zeiger vereinbaren für das QLineEdit

    Was bedeutet "einen Zeiger vereinbaren"?

    aber in meiner Welt ist das lineEdit_2 schon ein Wigets.

    Die Worte die du schreibst, sie ergeben keinen Sinn.

    Zeig mal die ganze Funktion wo der setFocus Aufruf drin steht.



  • @hustbaer
    ich weiß selber das es kein Sinn macht, dass ich alles was ich habe.

     zahl2 = locale().toFloat(ui->lineEdit_2->text());
    
    
    
        if (zahl2==0)
                {
                    QMessageBox::information(this, "Zahl2", "hat einen Null Wert Division durch Null geht nicht");
                    ui->lineEdit_2->setFocus();
                }
    


  • @M-W
    Ernsthaft?

    Du sollst die ganze Methode zeigen, nicht nur einen schlecht formatierten Auszug von neun Zeilen.



  • Das ist das Grundgerüst des Taschenrechner:

    #include "ui_taschenrechner.h"
    
    Taschenrechner::Taschenrechner(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::Taschenrechner)
    {
        ui->setupUi(this);
    }
    
    Taschenrechner::~Taschenrechner()
    {
        delete ui;
    }
    
    //der Slot für die Schaltfläche
    void Taschenrechner::on_pushButton_clicked()
    {
        float zahl1, zahl2, ergebnis = 0;
        bool flag = false;
        //für die Ausgabe
        QString ausgabe;
    
        //die Zahlen einlesen und umwandeln
        //dabei werden die Ländereinstellungen berücksichtigt
        zahl1 = locale().toFloat(ui->lineEdit->text());
        zahl2 = locale().toFloat(ui->lineEdit_2->text());
    
        //welche Rechenoperation ist ausgewählt?
        //die Addition
        if (ui->radioButtonAddition->isChecked() == true)
            ergebnis = zahl1 + zahl2;
        //die Subtraktion
        if (ui->radioButtonAddition->isChecked() == true)
            ergebnis = zahl1 - zahl2;
        //die Division
        if (ui->radioButtonDivision->isChecked() == true)
        {
            //ist die zweite Zahl ungleich 0?
            if (zahl2 != 0)
                ergebnis = zahl1 / zahl2;
            else
                flag = true;
        }
        //die Multiplikation
        if (ui->radioButtonMultiplikation->isChecked() == true)
            ergebnis = zahl1 * zahl2;
    
        //die Ausgabe setzen
        //wurde eine Division durch 0 versucht?
        if (flag == true)
            ausgabe = "Nicht definiert!";
        else
            ausgabe = locale().toString(ergebnis);
    
        //das Ergebnis anzeigen
        ui->label->setText(ausgabe);
        //und auch in der LCD-Anzeige
        ui->lcdNumber->display(ergebnis);
    }
    

    Jetzt möchte ich
    Ausnahmebehandlung, die Konvertierungsfehler bei den beiden Eingabefeldern für die Zahlen abfängt
    Habe auch schon eine Idee eine Methode für das abfangen und eine Methode für die Berechnung



  • @M-W
    Ich seh´ da kein setFocus()



  • @DocShoe
    Das ist richtig weil es noch keine Methode gibt, weil ich einfach nur die Eingabe betrachte und die Methode schritt für schritt ausbauen wollte.



  • @M-W

    Anruf bei der Werkstatt:
    Du: Mein Auto ist kaputt
    Mechaniker: Was funktioniert denn nicht?
    Du: Ich schalte den Scheibenwischer an, aber nix bewegt sich.
    Mechaniker: Am Besten kommen Sie mal vorbei, dann gucken wir uns das an.

    Du fährst hin.
    Mechaniker: Dann machen Sie doch mal den Scheibenwischer an!
    Du: Klick
    Mechaniker: Hm, funktioniert doch?
    Du: Ja, der ist auch bei meinem anderen Auto kaputt.
    Mechaniker: WTF?



  • Weil für mich ist nicht klar, ich könnte jetzt um ein Widegt an eine Methode zu einen Zeiger mit dem Typ des Widgets als Parameter übergebe.

    Aber wie beeeinflusst der zeiger das Widegt?
    Und wie muss der Zeiger aussehen klar ist mit vom Typ QLineEdit.



  • @M-W

    Funktioniert folgende Zeile?

    ui->lineEdit_2->setFocus();
    

    Wenn nicht, welche Fehlermeldung wird angezeigt. Falls keine Fehlermeldung: erhält das Widget den Fokus nicht?



  • @M-W
    Wenn ich das so lese, bekomme ich ein geistiges Schleudertrauma. Kurz, ich kann Dir einfach nicht folgen.



  • @DocShoe
    es kommt keine Fehlermeldung, ich vermute mal wenn das Wiget den Focus erhalten würde könnte ich evtl., die Eingabe ändern.



  • Was liefert hasFocus() denn nach setFocus() zurück?



  • Sorry, höre hasFocus() zum ersten mal wie binde ich das den ein. Einfach so

      ui->lineEdit_2->hasFocus();
    


  • @M-W
    Doku lesen, selber testen. Du verwechselst das Forum mit einem Compiler.



  • @DocShoe trotzdem dank das hat damit nichts zu tun, was bedeute den das?

    Ist QLineEdit hidden wird kein setFocus angenommen

    Wo soll es versteckt sein



  • @M-W
    Ich beobachte bei dir eine Tendenz, Dinge die du nicht verstehst einfach irgendwie auszulegen, und mit dieser Auslegung einfach munter weiterzuamchen. Ohne nachfragen, ohne ernsthaften Versucht es zu verstehen. So kann man nicht sinnvoll programmieren. Und so kann man auch nicht sinnvoll Fragen in einem Programmierforum stellen.

    Dieses Verhalten motiviert halt so gar nicht dir zu helfen.



  • @hustbaer
    Das ist alles auslegungssache, der eine macht aus allem eine Doktorarbeit, aber das Problem muss trotzdem gelöst werden, es führen mehrere weg nach Rom.
    Wenn man in einen Forum schon keine Fragen mehr fragen darf, weiß ich nicht ob man noch motiviert ist fragen zu fragen.


Log in to reply