Programmabbruch mit Code 3



  • Hallo,

    Ich habe ein QDialog mit Qt erstellt.
    Wenn ich diesen zum ersten mal aufrufe funktioniert alles problemlos.
    Wenn ich dann das Fenster schließe und erneut aufrufen will stürzt mein Programm ab und QT gibt die Fehlermeldung "closed with Code 3" aus.

    Hat jemand eine Idee, wo der Fehler liegen könnte?

    #include "steuerung.h"
    #include "ui_steuerung.h"
    #include <iostream>
    #include <fstream>
    #include "QMessageBox"
    #include "myudp.h"
    
    using namespace std;
    
    Steuerung::Steuerung(QWidget *parent) : QDialog(parent), ui(new Ui::Steuerung)
    {
        qDebug("1");
        ui->setupUi(this);
        myUDP send_grund;
        QLabel *nummern[]={ui->nummer_1, ui->nummer_2, ui->nummer_3, ui->nummer_4, ui ->nummer_5, ui ->nummer_6, ui->nummer_7, ui->nummer_8};
        QLabel *namen[]={ui->name_1, ui->name_2, ui->name_3, ui->name_4, ui->name_5, ui->name_6, ui->name_7, ui->name_8};
        QGroupBox *group[]={ui->Tuer_1, ui->Tuer_2, ui->Tuer_3, ui->Tuer_4, ui->Tuer_5, ui->Tuer_6, ui->Tuer_7, ui->Tuer_8};
        qDebug("2");
        //Daten aus Datei einlesen und zuweisen
        ifstream file;
        file.open ("current.cfg");
        file >> acnam;
        file >> anzahl;
        qDebug("3");
        for (short i=0; i<anzahl; i++)
        {
            file >> tueren[i].nummer;
            file >> tueren[i].name;
            file >> tueren[i].door_stat;
            file >> tueren[i].slide_stat;
            file >> tueren[i].door_press;
            file >> tueren[i].slide_press;
            file >> tueren[i].hardw;
            tueren[i].stat=tueren[i].door_stat*1000+tueren[i].slide_stat*100+tueren[i].door_press*10+tueren[i].slide_press;
        }
        file.close();
        // Kopflabel ausfüllen
        ui->Acname->setText(QString::fromStdString(acnam));
        ui->Anzahl->setNum(anzahl);
    
        //Bennennung der Türboxen
        for  (short i=0; i< anzahl; i++)
        {
            nummern[i]->setNum(tueren[i].nummer);
            namen[i]->setText(QString::fromStdString(tueren[i].name));
        }
    
        //Disable der nicht benötigten Türboxen
        for (int i=0;i < 8 ;i++)
        {
           if (i+1 > anzahl)
           {
               group[i]->setDisabled(true);
           }
        }
    
        // Disable Hardwaretueren
        for (short i=0;i<anzahl;i++)
        {
            if (tueren[i].hardw==true)
            {
                group[i]->setDisabled(true);
            }
        }
    
        //Einfärben der Groupboxen
        for (short i=0; i<anzahl;i++)
        {
            if (tueren[i].door_stat==0 && group[i]->isEnabled()==true)
            {
                group[i]->setStyleSheet("QGroupBox { background-color: red}");
            }
            else if (group[i]->isEnabled()==true && (tueren[i].slide_stat==0 || tueren[i].slide_press==0 || tueren[i].door_press==0))
            {
                group[i]->setStyleSheet("QGroupBox { background-color: rgb(255,191,0)}");
            }
            else if (group[i]->isEnabled()==true && (tueren[i].slide_stat==1 || tueren[i].slide_press==1 || tueren[i].door_press==1 || tueren->door_stat==1))
            {
                group[i]->setStyleSheet("QGroupBox { background-color: green}");
            }
        }
    
        //Zuweisung der Türdaten auf die Buttons
        QPushButton *doors[]={ui->d_cl_1, ui->d_cl_2, ui->d_cl_3, ui->d_cl_4, ui->d_cl_5, ui->d_cl_6,ui->d_cl_7,ui->d_cl_8};
        QPushButton *slides[]={ui->s_arm_1, ui->s_arm_2, ui->s_arm_3, ui->s_arm_4, ui->s_arm_5, ui->s_arm_6, ui->s_arm_7, ui->s_arm_8};
        QPushButton *dpress[]={ui->dp_ok_1, ui->dp_ok_2, ui->dp_ok_3, ui->dp_ok_4, ui->dp_ok_5, ui->dp_ok_6, ui->dp_ok_7, ui->dp_ok_8};
        QPushButton *spress[] ={ui->sp_ok_1, ui->sp_ok_2, ui->sp_ok_3, ui->sp_ok_4, ui->sp_ok_5, ui->sp_ok_6, ui->sp_ok_7, ui->sp_ok_8};
        QPushButton *doors_cl[]={ui->d_off_1, ui->d_off_2, ui->d_off_3, ui->d_off_4, ui->d_off_5, ui->d_off_6,ui->d_off_7,ui->d_off_8};
        QPushButton *slides_dis[]={ui->s_dis_1, ui->s_dis_2, ui->s_dis_3, ui->s_dis_4, ui->s_dis_5, ui->s_dis_6, ui->s_dis_7, ui->s_dis_8};
        QPushButton *dpress_nok[]={ui->dp_nok_1, ui->dp_nok_2, ui->dp_nok_3, ui->dp_nok_4, ui->dp_nok_5, ui->dp_nok_6, ui->dp_nok_7, ui->dp_nok_8};
        QPushButton *spress_nok[] ={ui->sp_nok_1, ui->sp_nok_2, ui->sp_nok_3, ui->sp_nok_4, ui->sp_nok_5, ui->sp_nok_6, ui->sp_nok_7, ui->sp_nok_8};
    
        for (short i=0;i<anzahl;i++)
        {
            doors[i]->setChecked(tueren[i].door_stat);
            if (doors[i]->isChecked()==false)
            {
                doors_cl[i]->setChecked(true);
            }
    
            slides[i]->setChecked(tueren[i].slide_stat);
            if (slides[i]->isChecked()==false)
            {
                slides_dis[i]->setChecked(true);
            }
    
            dpress[i]->setChecked(tueren[i].door_press);
            if (dpress[i]->isChecked()==false)
            {
                dpress_nok[i]->setChecked(true);
            }
    
            spress[i]->setChecked(tueren[i].slide_press);
            if (spress[i]->isChecked()==false)
            {
                spress_nok[i]->setChecked(true);
            }
        }
        for (short i = 0; i<anzahl;i++)
        {
            if (tueren[i].hardw==false)
            {
                send_grund.sendData(tueren[i].nummer,tueren[i].stat);
            }
        }
    }
    
    Steuerung::~Steuerung()
    {
        delete ui;
    }
    
    void Steuerung::on_Uebernehmen_clicked()
    {
        myUDP send_change;
        QPushButton *doors[]={ui->d_cl_1, ui->d_cl_2, ui->d_cl_3, ui->d_cl_4, ui->d_cl_5, ui->d_cl_6,ui->d_cl_7,ui->d_cl_8};
        QPushButton *slides[]={ui->s_arm_1, ui->s_arm_2, ui->s_arm_3, ui->s_arm_4, ui->s_arm_5, ui->s_arm_6, ui->s_arm_7, ui->s_arm_8};
        QPushButton *dpress[]={ui->dp_ok_1, ui->dp_ok_2, ui->dp_ok_3, ui->dp_ok_4, ui->dp_ok_5, ui->dp_ok_6, ui->dp_ok_7, ui->dp_ok_8};
        QPushButton *spress[] ={ui->sp_ok_1, ui->sp_ok_2, ui->sp_ok_3, ui->sp_ok_4, ui->sp_ok_5, ui->sp_ok_6, ui->sp_ok_7, ui->sp_ok_8};
        QGroupBox *group[]={ui->Tuer_1, ui->Tuer_2, ui->Tuer_3, ui->Tuer_4, ui->Tuer_5, ui->Tuer_6, ui->Tuer_7, ui->Tuer_8};
    
        //Daten aus den Boxen auslesen und versenden
        for  (short i=0; i < anzahl; i++)
        {
    
            tueren[i].door_stat = doors[i]->isChecked();
            tueren[i].slide_stat = slides[i]->isChecked();
            tueren[i].door_press = dpress[i]->isChecked();
            tueren[i].slide_press = spress[i]->isChecked();
            tueren[i].stat=tueren[i].door_stat*1000+tueren[i].slide_stat*100+tueren[i].door_press*10+tueren[i].slide_press;
    
            send_change.sendData(tueren[i].nummer,tueren[i].stat);
        }
    
       //Einfärben der Groupboxen
        for (short i=0; i<anzahl;i++)
        {
            if (tueren[i].door_stat==0 && group[i]->isEnabled()==true)
            {
                group[i]->setStyleSheet("QGroupBox { background-color: red}");
            }
            else if (group[i]->isEnabled()==true && (tueren[i].slide_stat==0 || tueren[i].slide_press==0 || tueren[i].door_press==0))
            {
                group[i]->setStyleSheet("QGroupBox { background-color: rgb(255,191,0)}");
            }
            else if (group[i]->isEnabled()==true && (tueren[i].slide_stat==1 || tueren[i].slide_press==1 || tueren[i].door_press==1 || tueren->door_stat==1))
            {
                group[i]->setStyleSheet("QGroupBox { background-color: green}");
            }
        }
    }
    
    void Steuerung::on_pushButton_2_clicked()
    {
      close() ;
    }
    

    Der Button zum Schließen ist der pushbutton_2.
    Der Fehler tritt auch auf wenn das Fenster über das "X" geschlossen wird.



  • Wie schließt/öffnest du den Dialog? Welcher Code wird dabei ausgeführt?

    Hier im Forum immer möglichst reduzierten Code posten, das ist sonst immer so viel.



  • Dialog wird aus einem anderen Fenster über:

    void MainWindow::on_Zustand_clicked()
    {
        Steuerung steuer;
        steuer.setModal(true);
        steuer.exec();
    }
    

    geöffnet.

    schließen geschieht über:

    void Steuerung::on_pushButton_2_clicked()
    {
        close();
    }
    

    Wie gesagt, im ersten Durchlauf alles OK, beim 2ten mal starten Absturz, Ich bekomme noch nicht mal die erste Debug-Ausgabe (Z12 im ersten Post)



  • gelöst,
    Fehler lag in der Headerdatei.

    Danke


Log in to reply