Le modèle objet de Qt est basé sur les QObject, qui offrent notamment le système très utile de communication inter-classes via signal / slot. Gérer l’héritage avec cette architecture peut-être de prime-abord légèrement tricky ! J’ai notamment eu quelques soucis de connexion signal / slot avec des classes héritant d’une interface (classe virtual pure).
Mon architecture
Une interface IMyClass et deux classes l’implémentant MyClass et MyClassSimulation. J’ai en prime un patron « factory » pour faciliter l’instanciation de ces classes (et pour avoir plus de souplesse dans l’avenir) : MyClassFactory.
Je connecte alors la méthode « slot » de mon instance de IMyClass (qui est soit MyClass, soit MyClassSimulation en ait) :
connect(otherClass, SIGNAL(aSuperSignal()), myClassInstance, SLOT(myGreatMethod());
L’erreur typique
QObject::connect: Cannot connect OtherClass::aSuperSignal() to (null)::myGreatMethod()