У меня есть класс (MyClass
), который наследует большую часть своей функциональности от встроенного объекта Qt (QGraphicsTextItem
). QGraphicsTextItem
наследуется косвенно от QObject
. MyClass
также реализует интерфейс, MyInterface
.
class MyClass : public QGraphicsTextItem, public MyInterface
Мне нужно иметь возможность использовать connect
и disconnect
на MyInterface*
. Но похоже, что connect
и disconnect
работают только на QObject*
экземплярах. Поскольку Qt не поддерживает множественное наследование от классов, производных от QObject, я не могу получить MyInterface
из QObject
. (В любом случае это не имеет большого смысла для интерфейса.)
В сети обсуждается проблема , но IMO предложенное решение в общем случае бесполезно (доступ к объекту через его интерфейс), поскольку вы не можете подключить сигналы и слоты с MyInterface*
но должен привести его к производному типу. Так как MyClass
является одним из многих MyInterface
классов, полученных в результате, это потребовало бы "вонючего кода" операторов if-this-cast-to-this-else-if-cast-to-that и побеждать цель интерфейс.
Есть ли хорошее решение для этого ограничения?
ОБНОВЛЕНИЕ: Я заметил, что если я dynamic_cast
a MyInterface*
до QObject*
(потому что я знаю все MyInterface
-приобретенные классы также наследуются в конечном итоге от QObject
, похоже, работает. То есть:
MyInterface *my_interface_instance = GetInstance();
connect(dynamic_cast<QObject*>(my_interface_instance), SIGNAL(MyInterfaceSignal()), this, SLOT(TempSlot()));
Но это действительно похоже, что я прошу неопределенное поведение ....