我将尝试将一个JS对象(map)传递给一个具有以下签名的C++成员函数。
通过使用
Q_INVOKABLE virtual bool generate(QObject* context);
通过使用
a.generate({foo: "bar"});
这个方法被调用了(通过断点检测),但传递的context
参数是NULL
。因为文档提到JS对象将作为QVariantMap
传递,所以我尝试使用如下签名:
Q_INVOKABLE virtual bool generate(QVariantMap* context);
但是这在MOC期间失败了。使用
Q_INVOKABLE virtual bool generate(QVariantMap& context);
该方法会导致 QML 在运行时无法找到该方法(错误信息为“未知的方法参数类型: QVariantMap&”)。
文档中只有一个从 C++ 传递 QVariantMap
到 QML 的例子,没有反向的示例。
使用 public slot
而不是 Q_INVOKABLE
显示完全相同的行为和错误。