Giesbert hat geschrieben:aber ob das zu 100% funktioniert? wenn du 2 ableitungen von der selben Klasse hast, kann es schon zu problemen kommen, gerade bei QObject, wo ja einiges an Code mit eingezogen wird: Stichwort: Meta Object Code.
2x von QObject

nterface + konkretes Plugin) ist eh nicht nötig. Wenn das Plugin selber nicht zusätzlich von QObject sondern z.B. von QWidget ableitet, hast du natürlich ein Problem!
Das mit dem pure-virtual-Interface macht schon irgendwo Sinn.
Um das Problem mit SIGNALS/SLOTS im Interface zu umgehen, hast du mehrere Möglichkeiten.
1) Das Signal/Slot-System in Qt läuft über Strings, bei falschen Namen beim connect gibt es zur Laufzeit eine Meldung (hat sicher jeder schonmal gesehen). In der eigenen Doku angeben "wenn dies und das funktionieren soll, bitte SIGNAL soundso und SLOT soundso im Plugin implementieren" - fertig. Schon ist das Interface pure virtual und kein QObject mehr.
2) Dem Interface eine Methode "bool connectToActionXYZ(const QObject*) const =0;" geben, die implementiert werden MUSS. In dieser Methode kann dann das konkrete Plugin connecten was es will.
1 ist bequem schränkt aber bei der Namensgebung ein, 2 hebt diesen Nachteil auf, zwingt aber den Benutzer eine eigene Methode zu implementieren nur für die connects.
Ich selber hatte schonmal ein System mit Interface-Klassen von QObject abgeleitet am Laufen, das war aber mehr auf Unerfahrenheit als auf absolute Notwendigkeit zurückzuführen. Es hat funktioniert (Lösung war diejenige mit eigener Lib, wo das das Interface-MOC-Zeugs drin gesteckt hatte).
Ich würde heute eher Lösung 1) fahren.