在C ++方面,我有此方法:
class MyClass : public QObject
{
Q_OBJECT
Q_INVOKABLE QVariant getFamily_byParentName(QString &parentName) const;
// ...
}
我在QML上调用C ++方法:
onButtonClicked: {
myClass.getFamily_byParentName(items3D.model[0]) // items3D.model[0] is a string
}
以上代码在QML行myClass.getFamily_byParentName(items3D.model[0])
上引发了此错误:
错误:未知方法参数类型:QString&
通过将QString
参数声明为const
,解决了上述错误:
Q_INVOKABLE QVariant getFamily_byParentName(const QString &parentName) const;
问题是:为什么?
答案 0 :(得分:3)
QML引擎通过复制值来转换适当的数据类型。
在您的情况下,QString &
是对不能复制的QString
的引用,而可以复制const QString &
。因此,不能将QObject
作为参数,因为它不可复制,而必须使用QObject *
,因为指针是可复制的。
与Q_SIGNAL的原理相同。