错误:未知的方法参数类型:QString&

时间:2019-04-10 06:26:43

标签: qt qml

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

问题是:为什么?

1 个答案:

答案 0 :(得分:3)

QML引擎通过复制值来转换适当的数据类型。

在您的情况下,QString &是对不能复制的QString的引用,而可以复制const QString &。因此,不能将QObject作为参数,因为它不可复制,而必须使用QObject *,因为指针是可复制的。

与Q_SIGNAL的原理相同。