Ven*_*emo 30
经过一些研究和阅读qobject_cast文档,我发现了这个:
qobject_cast()也可以与接口一起使用; 有关详细信息,请参阅Plug&Paint示例.
以下是示例的链接:即插即用.
在挖掘了示例中的interfaces头之后,我找到了Q_DECLARE_INTERFACE宏,可以让你做你想做的事情.
首先,不要QObject
从您的接口继承.对于您拥有的每个接口,请使用Q_DECLARE_INTERFACE声明,如下所示:
class YourInterface
{
public:
virtual void someAbstractMethod() = 0;
};
Q_DECLARE_INTERFACE(YourInterface, "Timothy.YourInterface/1.0")
Run Code Online (Sandbox Code Playgroud)
然后在类定义中,使用Q_INTERFACES宏,如下所示:
class YourClass: public QObject, public YourInterface, public OtherInterface
{
Q_OBJECT
Q_INTERFACES(YourInterface OtherInterface)
public:
YourClass();
//...
};
Run Code Online (Sandbox Code Playgroud)
完成所有这些麻烦后,以下代码有效:
YourClass *c = new YourClass();
YourInterface *i = qobject_cast<YourInterface*>(c);
if (i != NULL)
{
// Yes, c inherits YourInterface
}
Run Code Online (Sandbox Code Playgroud)