如何将 javascript 对象从 qml 发送到 C++?
How to send javascript object to C++ from qml?
我在 C++ 中有一个需要对象的方法:
Q_INVOKABLE void sendValue (const MyClass &value);
我想在 javascript 函数中从 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>();
但是 none 的设置器被调用,只有 MyClass 的默认构造函数。
您可以通过 QVariantMap
和带有 QVariantList
的 javascript 数组将 javascript 个对象从 qml 发送到 c++。反之亦然,您可以使用 C++ 中的 QVariantMap
将 javascript 对象发送到 qml。只需在 c++ Q_INVOKABLE
或插槽中创建函数并将参数设为 QVariantMap
,然后将 QVariantMap
转换为 MyClass {}
.
有关详细信息,请参阅 http://doc.qt.io/qt-5/qtqml-cppintegration-data.html(搜索 QVariantList 和 QVariantMap 到 JavaScript 数组和对象)。
我在 C++ 中有一个需要对象的方法:
Q_INVOKABLE void sendValue (const MyClass &value);
我想在 javascript 函数中从 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>();
但是 none 的设置器被调用,只有 MyClass 的默认构造函数。
您可以通过 QVariantMap
和带有 QVariantList
的 javascript 数组将 javascript 个对象从 qml 发送到 c++。反之亦然,您可以使用 C++ 中的 QVariantMap
将 javascript 对象发送到 qml。只需在 c++ Q_INVOKABLE
或插槽中创建函数并将参数设为 QVariantMap
,然后将 QVariantMap
转换为 MyClass {}
.
有关详细信息,请参阅 http://doc.qt.io/qt-5/qtqml-cppintegration-data.html(搜索 QVariantList 和 QVariantMap 到 JavaScript 数组和对象)。