我在C ++中有一个期望对象的方法:
Q_INVOKABLE void sendValue (const MyClass &value);
我想在qavascript函数中使用qml调用此方法,如下所示:
MyApi.sendValue({
"one":"one",
"two":2.0,
"three": false,
"four": [ 5, 6 ],
}
});
MyClass定义如下:
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QString>
#include <QVariant>
class MyClass {
QString one;
double two;
bool three;
int four[10];
public:
MyClass();
~MyClass();
// getters, setters, etc.
};
Q_DECLARE_METATYPE(MyClass)
#endif // MYCLASS_H
在main.cpp中,MyClass已在qRegisterMetaType<MyClass>();
注册
但是没有一个人被叫,只有MyClass&#39;默认构造函数。
答案 0 :(得分:6)
您可以通过QVariantMap
将qavascript对象从qml发送到c ++,使用QVariantList
发送javascript数组。另一方面,您可以使用来自c ++的QVariantMap
将javascript对象发送到qml。只需在c ++ Q_INVOKABLE
或插槽中创建您的函数,并将参数设为QVariantMap
,并将QVariantMap
转换为MyClass {}
。
有关详细信息,请参阅http://doc.qt.io/qt-5/qtqml-cppintegration-data.html(搜索QVariantList和QVariantMap到JavaScript数组和对象)。