いくつかの調査とqobject_castのドキュメントを読んだ後、私はこれを見つけました:
qobject_cast() はインターフェースと組み合わせて使用することもできます。詳細については、プラグ アンド ペイントの例を参照してください。
例へのリンクは次のとおりです: Plug & Paint。
例のインターフェイス ヘッダーを調べたところ、やりたいことを実行できるQ_DECLARE_INTERFACEマクロが見つかりました。
まず、インターフェイスから継承しないでください。QObject
使用しているすべてのインターフェイスに対して、次のように Q_DECLARE_INTERFACE 宣言を使用します。
class YourInterface
{
public:
virtual void someAbstractMethod() = 0;
};
Q_DECLARE_INTERFACE(YourInterface, "Timothy.YourInterface/1.0")
次に、クラス定義で、次のようにQ_INTERFACESマクロを使用します。
class YourClass: public QObject, public YourInterface, public OtherInterface
{
Q_OBJECT
Q_INTERFACES(YourInterface OtherInterface)
public:
YourClass();
//...
};
このすべての問題の後、次のコードが機能します。
YourClass *c = new YourClass();
YourInterface *i = qobject_cast<YourInterface*>(c);
if (i != NULL)
{
// Yes, c inherits YourInterface
}