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 接口/插件)进行转换。