QtPushButton: Routine mit "return" beenden



  • Hallo Leute ,

    ich habe eine Frage:
    Ich habe einen QTPushbutton, der eine Reihe an Funktionen ausführt. Es gibt Funktionen die Rückgabewerte haben. wie in dem BeipsielCode.
    Wenn ein Wert unter Null ist, soll der Rest des Code nicht mehr ausgeführt werden und eine Fehlermeldung ausgegeben werden. (Solche Abfragen kommen mehrmals vor).
    Ich dachte, wenn ich die Werte prüfe und dann eine "return" benutze , komme ich aus der Routine raus und kann mein Programm normal weiter benutzen.
    Jedoch wenn das "return" ausgeführt wird, kann ich danach die GUI nicht mehr verwenden. Sie wird nicht aktualisiert, es kommt kein Fehler, stürzt nicht ab oder sonst ein HInweis.

    void analyzer::on_pushButton_check_clicked()
    {
           .... do_stuff .....
    
            int result;
            
            result = calcValues();
            
            if(result <= 0){
                ui->statusBar->showMessage("Value smaller zero. Check your data and try again.");
                return; 
            }
    
           ....do_stuff....
    
    }
    

    Kann man einfach ein "return" einfügen ? oder macht man das anders bei Pushbuttons ?
    ich hoffe man versteht mein Problem



  • Natürlich kannst du das so machen. Die Slot-Funktionen in QT sind ganz normale Funktionen. Dein Problem liegt ziemlich sicher woanders.



  • Ob eine Funktion bis an ihr Ende läuft oder vorher ein return kommt ... beides hat den selben Effekt. Da muss bei Deinem Code was anderes schieflaufen.



  • vielen Dank für die schnellen ANtworten, dann muss ich nochmals genau prüfen



  • Ohja einen peinlichen Fehler gefunden.

    ich hatte am Anfang einen Bool gesetzt

    is_process_running = true
    und am ende dann false.
    Wenn man aber vorher abbricht, dann wird das nicht mehr auf false gesetzt.

    Jetzt habe ich umsonst hier für Traffic gesorgt. Der Thread ist damit eher sinnlos oder? Sorry dafür !



  • @Sicci Hats geholfen? Ja? Nicht sinnlos.



  • @Sicci sagte in QtPushButton: Routine mit "return" beenden:

    is_process_running = true

    Um genau solche Fehler zu vermeiden nutz man RAII:

    struct Lock
    {
        bool& l;
        Lock(bool& l ) : l(l) { l = true; }
        ~Lock() { l = false; }
    };
    
    ....
       void analyzer::on_pushButton_check_clicked() {
            Lock lock(is_process_running );
    

    Das kann man natürlich noch besser machen und in eine private Bibliothek legen.



  • @manni66 cool, danke! Das probiere ich mal aus


Log in to reply