MyClassQt 組み込みオブジェクト ( ) からほとんどの機能を継承するクラス ( ) がありますQGraphicsTextItem。QGraphicsTextItemから間接的に継承しQObjectます。MyClassインターフェースも実装していますMyInterface。
class MyClass : public QGraphicsTextItem, public MyInterface
connectとdisconnectonを使用できる必要があります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*(すべての派生クラスも最終的に から継承することを知っているので、それはうまくいくようです.つまり:MyInterfaceQObject
MyInterface *my_interface_instance = GetInstance();
connect(dynamic_cast<QObject*>(my_interface_instance), SIGNAL(MyInterfaceSignal()), this, SLOT(TempSlot()));
しかし、これは本当に未定義の動作を求めているようです....