Klasse innerhalb Klasse auf Methoden von Parent zugreifen?

Alles rund um die Programmierung mit Qt
Antworten
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Klasse innerhalb Klasse auf Methoden von Parent zugreifen?

Beitrag 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.
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag von forgoden »

ich hab das grad mit forward declaration gelöst. ist das überhaupt eine gute lösung in Qt?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 );
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Habt nicht ihr mit dem QObject::parent() angefangen? ;)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

War keine Kritik, ausserdem ists noch früh am Morgen, man möge mir verzeihen :roll:
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag 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.
Antworten