qt: неверное возвращаемое значение из invokemethod из унаследованного суперкласса - PullRequest
2 голосов
/ 27 октября 2011

У меня есть класс Light, наследующий класс Transform, наследующий от QObject.Класс Transform имеет функцию center (), которая возвращает Point3 (typedef из 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
{
};

1 Ответ

3 голосов
/ 27 октября 2011

Используйте qRegisterMetaType, чтобы зарегистрировать определение типа Point3.

typedef QVector3D Point3;
qRegisterMetaType<Point3>("Point3");

затем используйте этот тип в методе invoke вместо QVector3D

Point3 retVal;
QMetaObject::invokeMethod(obj, "center",
                                       Qt::DirectConnection,
                                       Q_RETURN_ARG(Point3, retVal));

Для получения более подробной информации обратитесь к документации метода вызова и документации qRegisterMetaType .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...