在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;
问题是:为什么?
QML引擎通过复制值来转换适当的数据类型。
在你的情况下,QString &
是对无法复制的QString
的引用,而是可以复制const QString &
。出于这个原因,你不能将QObject
作为参数,因为它不可复制,而你必须使用QObject *
,因为指针是可复制的。
它与Q_SIGNALs的原理相同。