如何从 qml 将 javascript 对象发送到C++

How to send javascript object to C++ from qml?

本文关键字:C++ 对象 javascript qml      更新时间:2023-09-26

我在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

在主要.cpp中,MyClass已在qRegisterMetaType<MyClass>();注册但是没有一个setter被调用,只有MyClass的默认构造函数。

您可以通过 QVariantMap 将 javascript 对象发送到 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 to JavaScript Array and Object)。