Slot überschreiben
Slot überschreiben
Hallo,
ich hab folgendes Problem. Ich hab eine GUI Klasse, welche Dialogfelder zur Verfügung stellt und die Möglichkeit bietet die Daten zu speichern. Jetzt möchte ich diese Klasse Vererben und den Slot welcher die Daten speichert überschreiben. Jedoch hab ich das Problem, dass immer nur der Slot der Basis-Klasse ausgeführt wird. Meine Frage ist nun wie stell ich es an, dass der Slot der Abgeleiteten Klasse aufgerufen wird?
ich hab folgendes Problem. Ich hab eine GUI Klasse, welche Dialogfelder zur Verfügung stellt und die Möglichkeit bietet die Daten zu speichern. Jetzt möchte ich diese Klasse Vererben und den Slot welcher die Daten speichert überschreiben. Jedoch hab ich das Problem, dass immer nur der Slot der Basis-Klasse ausgeführt wird. Meine Frage ist nun wie stell ich es an, dass der Slot der Abgeleiteten Klasse aufgerufen wird?
Ist schon klar. Aber ich denke, er will den SLOT über ein SIGNAL ansteuern und der connect arbeitet über das metaObject, dem ist ein virtual schnurzwurscht.solarix hat geschrieben:Slots sind normale Klassen-Methoden und können daher ganz normal mit "virtual" überschrieben werden.
Habs jetzt auch extra noch getestet. Das Verhalten tritt ein, wenn das Q_OBJECT in der abgeleiteten Klasse fehlt.
Wenn er aber das abgeleitete Widget über einen Basisklassenzeiger verwaltet und den SLOT als normale Methode anspricht hast du natürlich recht - virtual deklarieren und gut is.
OK, ohne Q_OBJECT mit virtual geht es auch mit dem connect. Wieder was gelernt 
Aber eigentlich sollte das Q_OBJECT-Macro schon drinnen stehen. Irgendwann wird es Probleme geben. Q_OBJECT deklariert wirtuelle Funktionen, der moc implementiert sie dann automatisch.
Die undefined reference kommt jetzt daher dass dein .h mit der Definition der abgeleiteten Klasse (und vllt. auch schon der deiner Basisklasse) nicht im .pro unter HEADERS steht, denn das macht der qmake im Makefile dann zu moc-Aufrufen.
Trag die Header die als Basisklasse QObject haben unter HEADERS in dein .pro ein und lass nochmal qmake laufen, bau nochmal mit make (oder welches Tool du da einsetzt), und es sollte laufen.
Aber eigentlich sollte das Q_OBJECT-Macro schon drinnen stehen. Irgendwann wird es Probleme geben. Q_OBJECT deklariert wirtuelle Funktionen, der moc implementiert sie dann automatisch.
Die undefined reference kommt jetzt daher dass dein .h mit der Definition der abgeleiteten Klasse (und vllt. auch schon der deiner Basisklasse) nicht im .pro unter HEADERS steht, denn das macht der qmake im Makefile dann zu moc-Aufrufen.
Trag die Header die als Basisklasse QObject haben unter HEADERS in dein .pro ein und lass nochmal qmake laufen, bau nochmal mit make (oder welches Tool du da einsetzt), und es sollte laufen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: