Speicherzugriffsfehler bei Zugriff auf GUI (Qt4)

Alles rund um die Programmierung mit Qt
Antworten
kayssun
Beiträge: 5
Registriert: 18. Februar 2006 16:31
Kontaktdaten:

Speicherzugriffsfehler bei Zugriff auf GUI (Qt4)

Beitrag von kayssun »

Irgendwas arbeitet gegen mich, ich hänge schon wieder...

Der Kompiliervorgang läuft ohne Probleme durch, aber das Programm bricht durch die Textänderung am Button mit einem Speicherzugriffsfehler ab.
Wenn mit http://qtforum.de/forum/viewtopic.php?t=1474 helfen sollte, hab ich wohl nicht ganz verstanden, wie :(

main.cpp:

Code: Alles auswählen

#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);
	MainWindow *hauptfenster = new MainWindow;
	hauptfenster->show();
	return app.exec();
}
mainwindow.h:

Code: Alles auswählen

#include "ui_mainwindow.h"

class MainWindow : public QMainWindow, private Ui::MainWindow
{
	Q_OBJECT
	
public:
	MainWindow( QWidget *parent = 0 );

private:
	Ui::MainWindow ui;

private slots:
	
};
mainwindow.cpp:

Code: Alles auswählen

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
	ui.setupUi(this);
	
	GoButton->setText("T_T_T_T_T_T_T_T");
}
Qt4.1.0, Linux, Gentoo
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Re: Speicherzugriffsfehler bei Zugriff auf GUI (Qt4)

Beitrag von Delryn »

kayssun hat geschrieben:

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
	ui.setupUi(this);
	
	GoButton->setText("T_T_T_T_T_T_T_T");
}
Das sieht mir doch sehr danach aus, als ob "GoButton", welchen deine Klasse MainWindow public von QMainWindow geerbt hat, nicht im ctor() von QMainWindow initalisiert wird.


// Oder ist GoButton ein Element von deiner Klasse MainWindow? Falls ja, ist es logisch, dass dein Programm abstürzt, du benutzt in auch hier im ctor(), ohne das vorher ein objekt angelegt wurde.
kayssun
Beiträge: 5
Registriert: 18. Februar 2006 16:31
Kontaktdaten:

Beitrag von kayssun »

Oder ist GoButton ein Element von deiner Klasse MainWindow? Falls ja, ist es logisch, dass dein Programm abstürzt, du benutzt in auch hier im ctor(), ohne das vorher ein objekt angelegt wurde.
Japp, so ist es. Das hätte ich wohl dazuschreiben müssen.

Wie genau muss ich es denn anlegen? Ich habe es im Designer angelegt und in die .pro Datei eingebunden, damit erstellt qmake die ui_mainwindow.h, die wiederum von mainwindow.h eingebunden wird. Muss ich irgendwo das Objekt nochmal deklarieren? Mit Qt3 wars irgendwie intuitiver...
Qt4.1.0, Linux, Gentoo
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

kayssun hat geschrieben:
Oder ist GoButton ein Element von deiner Klasse MainWindow? Falls ja, ist es logisch, dass dein Programm abstürzt, du benutzt in auch hier im ctor(), ohne das vorher ein objekt angelegt wurde.
Japp, so ist es. Das hätte ich wohl dazuschreiben müssen.

Wie genau muss ich es denn anlegen? Ich habe es im Designer angelegt und in die .pro Datei eingebunden, damit erstellt qmake die ui_mainwindow.h, die wiederum von mainwindow.h eingebunden wird. Muss ich irgendwo das Objekt nochmal deklarieren? Mit Qt3 wars irgendwie intuitiver...
Ja, und alle Element die du im Designer platziert hattest, befinden sich grob gesagt in "ui" und werden durch setupUi(this) initialisiert.
Soweit hast du es ja auch.

Nur dein GoButton müsstest du dann so ansprechen:

ui.GoButton->setText("bla");
kayssun
Beiträge: 5
Registriert: 18. Februar 2006 16:31
Kontaktdaten:

Beitrag von kayssun »

Ah. Danke.

Kann ich das "ui." eigentlich irgendwie vermeiden (ich will einen größeren Brocken Code von qt3 portieren), oder muss ich das jetzt überall davorstellen?
Qt4.1.0, Linux, Gentoo
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

Sicher, es geht.
Aber da ich dein Projekt nicht kenne (Struktur etc.) kann ich dir da leider auch nicht helfen ;)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

kayssun hat geschrieben:Kann ich das "ui." eigentlich irgendwie vermeiden (ich will einen größeren Brocken Code von qt3 portieren), oder muss ich das jetzt überall davorstellen?
using namespace Ui; an den Anfang der *.cpp sollte reichen.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Werfe ein Blick in die Doku zum Qt Designer unter
The Multiple Inheritance Approach nach dort geht es denn ohne "ui"
Antworten