我有一个类 ( 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-that-cast-to-that 语句并破坏接口的目的。
这个限制有没有好的解决方案?
更新:我注意到如果我dynamic_cast
a MyInterface*
to QObject*
(因为我知道所有MyInterface
派生类最终也继承自QObject
,它似乎工作。那是:
MyInterface *my_interface_instance = GetInstance();
connect(dynamic_cast<QObject*>(my_interface_instance), SIGNAL(MyInterfaceSignal()), this, SLOT(TempSlot()));
但这真的好像我在要求未定义的行为......