MyClass
Qt 組み込みオブジェクト ( ) からほとんどの機能を継承するクラス ( ) がありますQGraphicsTextItem
。QGraphicsTextItem
から間接的に継承しQObject
ます。MyClass
インターフェースも実装していますMyInterface
。
class MyClass : public QGraphicsTextItem, public MyInterface
connect
とdisconnect
onを使用できる必要がありますMyInterface*
。しかし、インスタンスconnect
でdisconnect
のみ機能するようです。QObject*
Qt は QObject 派生クラスからの多重継承をサポートしていないため、から派生できませMyInterface
んQObject
。(とにかく、それはインターフェイスにとってあまり意味がありません。)
オンラインで問題についての議論がありますが、IMO 提案された解決策は、信号とスロットを接続することはできませんがMyInterface*
、派生型にキャストする必要があるため、一般的なケース (インターフェイスを介してオブジェクトにアクセスする) ではかなり役に立ちません。MyClass
は多くの 派生クラスの 1 つであるためMyInterface
、これは「コード臭い」if-this-cast-to-this-else-if-that-cast-to-that ステートメントを必要とし、インターフェイスの目的を無効にします。
この制限に対する適切な解決策はありますか?
更新:もし私dynamic_cast
がMyInterface*
to QObject*
(すべての派生クラスも最終的に から継承することを知っているので、それはうまくいくようです.つまり:MyInterface
QObject
MyInterface *my_interface_instance = GetInstance();
connect(dynamic_cast<QObject*>(my_interface_instance), SIGNAL(MyInterfaceSignal()), this, SLOT(TempSlot()));
しかし、これは本当に未定義の動作を求めているようです....