Von Widget erben

Alles rund um die Programmierung mit Qt
Antworten
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Von Widget erben

Beitrag von rubikon »

Hallo.

Ich habe ein eignes Widget erstellt, welches eine pure virtual Funktion, einen pure virtual privaten Slot und einen virtual privaten Slot zum überscheiben haben soll:

Code: Alles auswählen

class ClassA : public QWidget
{
    Q_OBJECT

	public:
		explicit ClassA(QWidget *parent = 0);
		virtual void fkt1() = 0;
	
	private slots:
		virtual void pushButtonOkClicked();
		virtual void pushButtonCloseClicked() = 0;	
}
Nun soll eine Klasse davon erben und die Methoden implementieren bzw. überschreiben. Das habe ich so versucht:

Code: Alles auswählen

class ClassB : public ClassA
{
    Q_OBJECT

	public:
		explicit ClassB(QWidget *parent = 0);
		void fkt1();
	
	private slots:
		void pushButtonOkClicked();
		void pushButtonCloseClicked();	
}

ClassB::ClassB(QWidget *parent) :
	QWidget(parent)
{
}
Nur bekomme ich bekomme ich eine Reihe von Fehlern, angefangen bei
error C2614: 'ClassB': Unzulässige Elementinitialisierung: 'QWidget' ist weder Basis noch Element
Scheinbar mache ich prinzipiell schon was falsch? Wie mache ich es richtig?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Von Widget erben

Beitrag von franzf »

Die Fehlermeldung sagt doch schon alles: QWidget ist keine direkte Basis von ClassB, deshalb hat eine Basisinitialisierung mit QWidget in ClassB nichts zu suchen.
Du willst in ClassB die Basis ClassA initialisieren.

Ansonsten:
pure virtual SLOT ist MMn. keine gute Idee. Mach doch einfach eine normale pure virtual Funktion do_pushButtonCloseClick und einen normalen SLOT pushButtonCloseClick(), in dem du do_pushButtonCloseClick aufrufst.

// kleines Edit:
pure virtual SLOTS funktionieren auf alle Fälle. Ich finds nur etwas komisch. Ich hab schon gegen virtuelle Interfaces eine Abneigung -> NVI (non-virtual interfaces), dann auch noch den Metacompiler + Konsorten und die ganze Magie mit rein ziehen, da stellen sich mir meine Rückenhaare auf :D
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Re: Von Widget erben

Beitrag von rubikon »

Hmm... Jetzt jetzt wo ich es sehe ist mir das klar geworden :D

Eine Sache habe ich noch: Nun möchte ich in ClassB auf UI Elemente zugreifen. Dazu habe ich den ui Pointer in CassA unter protected gesetzt, damit er mir in den geerbten Klassen auch zu Verfügung steht. Wenn ich aber nun versuche auf ein UI Element zuzugreifen, sagt er mir:

Code: Alles auswählen

error C2027: Verwendung des undefinierten Typs "Ui::ClassA" 
Wahrscheinlich habe ich wieder Tomaten auf den Augen :oops:
Antworten