qobject cast

T qobject_cast(QObject *object)

通過從 QObject 派生並使用 Q_OBJECT 巨集新增的功能是使用 qobject_cast 的能力。

例:

class myObject : public QObject
{
    Q_OBJECT
    //...
};

QObject* obj = new myObject();

要檢查 obj 是否是 myObject 型別並將其轉換為 C++,你通常可以使用 dynamic_cast 。這取決於在編譯期間啟用 RTTI。

另一方面,Q_OBJECT 巨集生成轉換檢查和可在 qobject_cast 中使用的程式碼。

myObject* my = qobject_cast<myObject*>(obj);
if(!myObject)
{
    //wrong type
}

這不依賴於 RTTI。並且還允許你跨動態庫邊界(通過 Qt 介面/外掛)進行轉換。