Qt:不正确的返回值从invokemethod从继承超类
qt: incorrect return value from invokemethod from inherited superclass
我有一个Light类继承了从QObject继承的Transform类。Transform类有一个center()函数,它返回一个Point3 (QVector3D的类型定义)。我试图在一个轻对象上调用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
{
};
使用qRegisterMetaType注册Point3类型定义。
typedef QVector3D Point3;
qRegisterMetaType<Point3>("Point3");
然后在调用方法中使用此类型而不是QVector3D
Point3 retVal;
QMetaObject::invokeMethod(obj, "center",
Qt::DirectConnection,
Q_RETURN_ARG(Point3, retVal));
查看invoke方法文档和qRegisterMetaType文档。
相关文章:
- 模板转换为超类
- 我的超类中的模板问题与结构定义
- 创建子类的多个实例,其中只有一个超类实例
- 给定一个指向对象的超类指针,如何获取对象的大小?
- 重写另一个方法 [C++] 使用的超类回调函数
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- C++为API中定义的结构创建超类
- 使用派生类C++方法的超类
- 确保指向超类的指针指向c++中某个子类的对象
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 在从给定超类继承的所有类上调用虚函数
- 如何使 Swig 发出C++超类
- 如何根据构造函数参数使用超类类型初始化成员变量?
- C++:从类型索引中获取超类类型索引
- 为什么编译器找不到超类的方法?
- 无法使用子类变量访问超类公共成员
- 如何将项目放入具有模板化超类类型的向量中
- 如何高效/正确地存储等距游戏的不同类(单个超类的所有子类型)的地图?
- Qt:不正确的返回值从invokemethod从继承超类