我有一個Light類繼承了一個繼承自QObject的Transform類。 Transform類有一個返回Point3(QVector3D的typedef)的center()函數。我試圖調用light對象上的invokeMethod,但得到不正確的返回值。我是否錯誤地調用了該功能?qt:從繼承超類的invokemethod返回值不正確
QObject* obj = qobject_cast<QObject*>(lObj);
std::cout << lObj->center() << std::endl;
QVector3D retVal;
QMetaObject::invokeMethod(obj, "center",
Qt::DirectConnection,
Q_RETURN_ARG(QVector3D, retVal));
std::cout << retVal << std::endl;
和這裏就是我得到了...
(0,10,0) // from lObj->center()
(0,0,0) // from invokeMethod(...)
下面是一些我的代碼...
typedef QVector3D Point3;
class Transformable : public QObject
{
Q_OBJECT
Q_INVOKABLE Point3 center() { return _center; }
...
};
class Light : public Transformable, public Entity // Entity is a non-Qt-related class
{
};
class PointLight : public Light
{
};
「不正確的返回值」是什麼意思?你確認了哪個函數實際上被調用了嗎?放置一些斷點或跟蹤並驗證哪些函數被調用,基類或派生類版本。 –
你爲什麼要投射,爲什麼你不**檢查invokeMethod的返回值? – Mat
我想通過檢查返回值對編程檢查函數是否失敗很有用,但是由於我正在檢查這些值,所以我知道它是失敗的。 – voodoogiant