繁体   English   中英

Qt接口或抽象类和qobject_cast()

[英]Qt interfaces or abstract classes and qobject_cast()

我有一组相当复杂的C ++类,它们是用Java重写的。 因此每个类都有一个继承的类,然后它还实现了一个或多个抽象类(或接口)。

是否可以使用qobject_cast()从类转换为其中一个接口? 如果我从QObject派生所有接口,由于模糊的QObject引用,我得到一个错误。 但是,如果我只有从QObject继承的基类,我不能使用qobject_cast()因为它与QObject运行。

我希望能够在它们的接口引用的插件和DLL之间抛出类。

经过一些研究和阅读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")

然后在类定义中,使用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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM