Есть вот такой код. В качестве примера пытаюсь вызвать метаметод layout() у наследника от QWidget (Q_INVOKABLE установлен).
В функции
call() все нормально работает, но в
somefunction() переменная
*data приходит сломанной или пустой:
bool call(QObject *qo, QMetaMethod metaMethod, void **data) {
QGenericReturnArgument returnArgument(metaMethod.typeName(), &data);
bool ok = metaMethod.invoke(qo, Qt::DirectConnection, returnArgument);
if(ok) {
QLayout *layout = reinterpret_cast<QLayout *>(data); // Всё ок
qDebug() << layout ->metaObject()->className(); // QLayout
}
return ok;
}
void somefunction() {
/* ... */
void *data;
bool ok = call( qo, metaMethod, &data );
if(ok) {
QLayout *layout = reinterpret_cast<QLayout *>(data); // Segfault
qDebug() << layout ->metaObject()->className();
}
}
Что я делаю не так?