[gelöst] Anfängerfrage -Objekt erzeugen im Constructor

Alles rund um die Programmierung mit Qt
Antworten
Mark26HH
Beiträge: 4
Registriert: 30. Oktober 2007 19:15
Wohnort: Hamburg
Kontaktdaten:

[gelöst] Anfängerfrage -Objekt erzeugen im Constructor

Beitrag von Mark26HH »

Ein herzliches "Hallo Welt" an die Community,

ich beschäftige mich gerade neu mit Qt und finde nur langsam den Einstieg. Ich verwende die Qt Integration für Eclipse und möchte jetzt im Constructor meiner von QMainWindow abgeleiteten Klasse ein neues Objekt erzeugen und dieses als CentralWidget setzen.

Sowas gibts in den Beispieldateien. Leider werden aber in den Qt Beispielprogrammen keine .ui Dateien verwendet sondern die Constructoren von Hand geschrieben (setupUI entfällt) was mich zu folgendem Verständnisproblem führt:

Da gibt es z.B. in einer der Beispieldateien folgende Zeile:

Code: Alles auswählen

 MainWindow::MainWindow()
 {
     textEdit = new QTextEdit;
     setCentralWidget(textEdit);

...
Klappt wunderbar; ein QTextEdit Objekt wird erzeugt und als CentralWidget von MainWindow gesetzt.

Jetzt probiere ich aber mal folgendes:

Ich erstelle über Eclipse ein neues Qt Gui Project auf Basis von QMainWindow. Jetzt möchte ich genau das gleiche machen.

Code: Alles auswählen

ccalign::ccalign(QWidget *parent)
    : QMainWindow(parent)
{
	ui.setupUi(this);

// und jetzt von mir neu:

textEdit = new QTextEdit();
setCentralWidget(textEdit);
...OHNE, dass ich im QT Designer ein QTextEdit Widget im Formular erzeugt hätte. Muss ich ja auch nicht, ich will ja eins "von Hand" erzeugen.

Der Compiler meldet aber "textEdit: no declaration, first use this function". Natürlich habe ich die Klasse <QtGui/QTextEdit> vorher eingebunden.

Jetzt dachte ich mir: "Ok, er kennt textEdit nicht"; habe dann über den QtDesigner von Hand dasselbe Objekt mit dem Namen textEdit via Drag&Drop erzeugt; klappt problemlos.

Wenn ich jetzt aber das ganze von vorne mit lediglich

Code: Alles auswählen

setCentralWidget(textEdit);
an gleicher Stelle ausprobiere, kommt wieder genau der gleiche Fehler: textEdit unbekannt.
Das kann aber doch gar nicht sein? Das wird doch automatisch initialisiert wenn man das im QtDesigner erzeugt hat...

Ich hab dann noch diverse Kombinationen mit this->setCentralWidget | setCentralWidget(this.textEdit) usw. probiert, aber gleiches Problem.

Über die Suchfunktion des Forums habe ich eine Lösung des Problems gefunden, und zwar:

Code: Alles auswählen

this->setCentralWidget(new QTextEdit(this));
klappt super. Jetzt wollte ich das mal etwas trennen und habe es wieder mit:

Code: Alles auswählen

textEdit = new QTextEdit(this);
this->setCentralWidget(textEdit);
probiert, aber wieder das gleiche Problem - textEdit unbekannt.

Kann mir mal einer erklären welche fundamentale Wissenslücke da bei mir klafft? Wäre sehr nett!

Vielen Dank für Eure Hilfe!

Grüße

.Mark
Zuletzt geändert von Mark26HH am 30. Oktober 2007 22:46, insgesamt 1-mal geändert.
Verwende: Qt 4.3.1, Eclipse mit Qt Integration unter Windows XP SP2 auf HP NX7300 Notebook
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das fehlen wohl leider die C++ - Grundlagen. Kauf dir ein C++-Buch und im ersten Kapitel wird stehen was Du suchst.
Wie kann man eine Variable verwenden wollen wenn man sie nirgends definiert hat??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mark26HH
Beiträge: 4
Registriert: 30. Oktober 2007 19:15
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Mark26HH »

Ok, das war klar: Kaum kritzel ich mein Problem ins Forum, schon finde ich die Lösung quasi selbst:

Funktionieren tuts mit:

QTextEdit *textEdit = new QTextEdit();
this->setCentralWidget(textEdit);


... und zur Ehrenrettung:

Ich hatte es zuvor auch mit

QTextEdit textEdit = new QTextEdit();
this->setCentralWidget(textEdit).

probiert und war gescheitert. Der Pointer mal wieder.
Verwende: Qt 4.3.1, Eclipse mit Qt Integration unter Windows XP SP2 auf HP NX7300 Notebook
Antworten