簡體   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