Работающий код, функция testValue() возвращает копию значения:
class Node : public QObject
{
Q_OBJECT
public:
//some code
Q_INVOKABLE int testValue() {return _test;}
//some code
private:
int _test = 5;
//some code
};
Вызываем фнкцию testValue через invokeMethod:
int testValue;
world->metaObject()->invokeMethod(world, "testValue", Q_RETURN_ARG(int, testValue));
qDebug() << "TEST VALUE:" << testValue; //5
Все хорошо, видим на экране 5
Тот же код, но функция testValue возвращает ссылку:
class Node : public QObject
{
Q_OBJECT
public:
//some code
Q_INVOKABLE int &testValue() {return _test;}
//some code
private:
int _test = 5;
//some code
};
вызываем invokeMethod:
int testValue;
world->metaObject()->invokeMethod(world, "testValue", Q_RETURN_ARG(int, testValue));
qDebug() << "TEST VALUE:" << testValue; //?
значение testValue не меняется и вывод зависит от платформы
Так не работает тоже:
int testValue;
world->metaObject()->invokeMethod(world, "testValue", Q_RETURN_ARG(int&, testValue));
qDebug() << "TEST VALUE:" << testValue; //?
Определим тип intamp, но тоже не работает:
typedef int& intamp;
int testValue;
world->metaObject()->invokeMethod(world, "testValue", Q_RETURN_ARG(intamp, testValue));
qDebug() << "TEST VALUE:" << testValue;
PS Может понадобиться, если функция возвращает ссылку на массивный объект, здесь привел более простой и академический пример, чтобы понять, почему нельзя использовать ссылку в Q_RETURN_ARG
, не нашел прямого упоминания об этом в документации QT
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, чем отличается виртуальная функция от шаблонной функции?
Стоит задача считывать большие zip-архивы (от 500Мб и выше)
Здравствуйте, код выдает 0 9Подскажите пожалуйста, почему если поменять модификатор метода initialize() в классе А на private, то получаем 6 9 ? Инициализация...