我写了一个类'clsFileThread',该类派生自'clsThread'。 “ clsThread”源自“ QThread”
在另一个类中,我编写了一个访问方法,该方法返回指向“ QObject”的指针。在此方法中,您需要执行以下操作:
QObject* clsScriptHelper::use(QJsonValue strModule) {
QObject* pobjModule = nullptr;
if (strModule.toString().compare("fileIO") == 0) {
pobjModule = new clsFileThread();
}
return pobjModule;
}
返回指针时,它是指向“ clsThread”的指针,为什么?我本以为该指针将是QObject类型,然后使用多态性可以访问更高级别的成员和方法,但事实并非如此。
我想做的是通过'use'返回的指针访问'clsFileThread'的方法,但这不起作用。
答案 0 :(得分:0)
返回的指针是QObject*
类型的,即使对象本身是clsFileThread*
(因为这就是定义use
方法的方式)。因此,直接访问返回值将不允许访问clsFileThread方法。
类继承看起来像这样:
clsFileThread > clsThread > QThread > QObject
如果您想像一个clsFileThread一样访问返回对象,则可以dynamic_cast
返回值,例如:
QObject* obj = clsScriptHelper::use(whatever);
clsFileThread* clsFileThreadObject = dynamic_cast<clsFileThread*>(obj);
if (clsFileThreadObject)
{
clsFileThreadObject->doSomething();
}