Seite 1 von 1

[gelöst] Programmabsturz

Verfasst: 23. Oktober 2008 17:19
von nexus
Hallo,

main Programm sieht folgender maßen aus (dazu kommen noch die ui files die mit dem Designer erstellt wurden)

dialog.h

Code: Alles auswählen

#ifndef DIALOG_H
#define DIALOG_H

#include <QtGui/QWidget>
#include "ui_dialog.h"

class Dialog : public QWidget
{
    Q_OBJECT

	public:
		Dialog(QWidget *parent);
		~Dialog();
		Ui::EingabeDialog ui;

    private slots:
		void ok();

    private:

};

#endif // DIALOG_H
dialog.cpp

Code: Alles auswählen

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
{
	ui.setupUi(this);
	connect(ui.okButton, SIGNAL(clicked()), this, SLOT(ok()));
}

void Dialog::ok(){
	ui.lineEdit->setText("Ok");
}

Dialog::~Dialog()
{

}
mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_

#include "ui_mainwindow.h"
#include "dialog.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

	public:
		MainWindow();
		~MainWindow();

    private slots:
		void cancel();

    private:
    	Ui::MainWindow ui;
    	Dialog *d;
};

#endif /* MAINWINDOW_H_ */
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"


MainWindow::MainWindow(){
	ui.setupUi(this);
	Dialog *d = new Dialog(this);
	QGridLayout *lay = new QGridLayout();
	lay->addWidget(d);
	ui.tab1->setLayout(lay);

	connect(d->ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
}

void MainWindow::cancel(){
	d->ui.lineEdit_2->setText("Cancel");
}

MainWindow::~MainWindow(){

};
Sobald nun jedoch auf den cancelButton geklickt wird stürzt das Programm ab und ich hab keine Ahnung wiso...

Verfasst: 23. Oktober 2008 17:32
von Christian81
d ist uninitialisiert.

Verfasst: 23. Oktober 2008 17:38
von nexus
d wird doch initialisiert

Code: Alles auswählen

Dialog *d = new Dialog(this);

Verfasst: 23. Oktober 2008 17:40
von Christian81
Das d meinte ich ja nicht! Ich meinte das d in MainWindow::cancel()

Verfasst: 23. Oktober 2008 17:49
von nexus
das wird doch durch das andere initialisiert ist ja das selbe d oder nicht? das steht ja in der gesamten klasse zur verfügung

edit: hast recht stand grad voll auf dem schlauch

Verfasst: 24. Oktober 2008 11:47
von gerome69
nexus hat geschrieben:das wird doch durch das andere initialisiert ist ja das selbe d oder nicht? das steht ja in der gesamten klasse zur verfügung
Dann müßte im Konstruktor von MainWindow stehen:
d = new Dialog(this);

Du schreibst dort aber:
Dialog *d = new Dialog(this);

Und dieses d hat nichts mit dem Zeiger "d" in der Klasse zu tun und ist nach dem Beenden des Konstruktor auch wieder weg. Stichwort: "variable scope".

Gruß, Gérôme

Verfasst: 24. Oktober 2008 23:45
von nexus
ja genau, dass hatte ich dann auch bemerkt ;-)