Seite 1 von 1

Klasse innerhalb Klasse auf Methoden von Parent zugreifen?

Verfasst: 10. Mai 2009 11:52
von forgoden
Also ich habe eine geerbte Klasse von QWidget innerhalb einer geerbten Klasse von QMainWindow erzeugen lassen. Diese Klasse soll auf die Methoden von QMainWindow zugreifen. Wie geht das am besten? Ich glaube ich habe was in C++ verpasst.

Ich glaube das geht mit parent, aber die funktionieren nur mit Methoden von QWidget oder QMainWindow, aber nicht mit selbsterzeugten Methoden.

Verfasst: 10. Mai 2009 13:55
von forgoden
ich hab das grad mit forward declaration gelöst. ist das überhaupt eine gute lösung in Qt?

Verfasst: 10. Mai 2009 15:48
von franzf
Ein forward-declaration alleine bringt dich bei der Verwendung von parent() nicht wirklich weiter.
Du musst das QWidget, was parent() ja zurück liefert, erst noch casten. Dazu verwendest du am besten qobject_cast.

Code: Alles auswählen

MyMainWindow *w = qobject_cast<MyMainWindow *>(parent());
w->doSomethingReallySpecial( 127890446 );

Verfasst: 10. Mai 2009 17:28
von Christian81
Achtung: qobject_cast<> geht nur wenn auch Q_OBJECT in der abgeleiteten Klasse vorhanden ist (was zwar meist der Fall ist aber manchmal eben auch nicht)

Verfasst: 10. Mai 2009 22:40
von forgoden
komischerweise geht das ganze auch ohne cast?

Code: Alles auswählen

class Mmakros : public QWidget, private Ui::Macros {
	Q_OBJECT
public:
	Mmakros(MainWindow *parent = 0 , Qt::WFlags flags = 0);

Code: Alles auswählen

Mmakros::Mmakros(MainWindow *parent, Qt::WFlags flags ): QWidget(parent, flags) {
	getparent = parent;
also MainWindow statt QWidget und in elementinitialisierer doch QWidget
scheint bei mir problemlos zu funktionieren

Verfasst: 11. Mai 2009 06:36
von Christian81
Was sollte an der Stelle auch nicht funktionieren?
Das Problem ist das QObject::parent() Dir einen Ptr auf QObject zurückgibt. Du allerdings speicherst Dir diesen Ptr selbst...

Verfasst: 11. Mai 2009 11:07
von pfid
Habt nicht ihr mit dem QObject::parent() angefangen? ;)

Verfasst: 11. Mai 2009 12:19
von franzf
pfid hat geschrieben:Habt nicht ihr mit dem QObject::parent() angefangen? ;)
Erster Post von forgoden hat geschrieben:Ich glaube das geht mit parent, aber die funktionieren nur mit Methoden von QWidget oder QMainWindow, aber nicht mit selbsterzeugten Methoden.
Da darf man das doch dann so annehmen, oder?

Verfasst: 11. Mai 2009 13:04
von pfid
War keine Kritik, ausserdem ists noch früh am Morgen, man möge mir verzeihen :roll:

Verfasst: 11. Mai 2009 14:14
von forgoden
hm ich probier zwar mit cast aus

Code: Alles auswählen

MainWindow *w = qobject_cast<MainWindow *>(parent());
aber im moment funktioniert es gar nicht. kenn mich mit casten leider nicht aus.

liefert immer so ein Fehler zurück:
error C2064: Ausdruck ergibt keine Funktion, die 0 Argumente übernimmt

muss mich mal damit befassen...
in meinem code eh durcheinander alles.


edit: Es klappt jetzt, aber nur in Methoden. Im Konstruktor funktioniert es nicht, was ich noch nicht verstehe.