Seite 1 von 1
Speicherzugriffsfehler bei Zugriff auf GUI (Qt4)
Verfasst: 27. Februar 2006 12:08
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");
}
Re: Speicherzugriffsfehler bei Zugriff auf GUI (Qt4)
Verfasst: 27. Februar 2006 12:13
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.
Verfasst: 27. Februar 2006 12:38
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...
Verfasst: 27. Februar 2006 12:42
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");
Verfasst: 27. Februar 2006 13:02
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?
Verfasst: 27. Februar 2006 13:17
von Delryn
Sicher, es geht.
Aber da ich dein Projekt nicht kenne (Struktur etc.) kann ich dir da leider auch nicht helfen

Verfasst: 27. Februar 2006 13:36
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.
Verfasst: 27. Februar 2006 20:50
von BartSimpson
Werfe ein Blick in die Doku zum Qt Designer unter
The Multiple Inheritance Approach nach dort geht es denn ohne "ui"