Qt 错误:未知方法参数类型:QString&; 在C++方面,我有这样的方法: class MyClass:公共QObject { Q_对象 Q_可调用QVariant getFamily_byParentName(QString&parentName)const; // ... } 我在QML上调用C++方法: onButtonClicked: { myClass.getFamily_byParentName(items3D.model[0]) // items3D.model[0] is a string }

Qt 错误:未知方法参数类型:QString&; 在C++方面,我有这样的方法: class MyClass:公共QObject { Q_对象 Q_可调用QVariant getFamily_byParentName(QString&parentName)const; // ... } 我在QML上调用C++方法: onButtonClicked: { myClass.getFamily_byParentName(items3D.model[0]) // items3D.model[0] is a string },qt,qml,Qt,Qml,上面的代码在QML行myClass.getFamily\u byParentName(items3D.model[0])抛出此错误。: 错误:未知的方法参数类型:QString& 解决方案 通过将QString参数声明为const解决了上述错误: Q_可调用QVariant getFamily_byParentName(const QString&parentName)const; 问题是:为什么?QML引擎通过复制值来转换适当的数据类型 在您的情况下,QString&是对不能复制的QStr

上面的代码在QML行
myClass.getFamily\u byParentName(items3D.model[0])抛出此错误。

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


解决方案 通过将
QString
参数声明为
const
解决了上述错误:

Q_可调用QVariant getFamily_byParentName(const QString&parentName)const;

问题是:为什么?

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

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


与QyStudio相同的原理.

省略<代码> const >意味着你可能希望能够从函数调用的地方改变QStand(因为你得到了对对象的引用),但是既然有从JavaScript到C++的转换,这就没有意义(至少对我来说是这样的);)项目3d.model[0]的确切类型是什么?如果
items3D
在该上下文中是常量,则它很可能是
const QString&
,即方法需要接受的类型。您总是可以将
const
添加到值的类型中,即从
QString&
添加到
const QString&
是可以的,但您不能将其移除(否则,重点是,您在一个地方承诺不会修改它,但可以将它传递到其他地方)@Caleth
items3D。模型[0]
是QML字符串。QML类似于JavaScript,因此它可能是类似于
“First item”
的JavaScript字符串。您建议的场景是有意义的:QML字符串可能被认为是不可修改的(至少在与C++通信时),因此当将其传递给C++时,我需要使用<代码> const 参考!这很有道理:)我想知道为什么
QString&
不可复制,而
constqstring&
可复制。你知道任何可以帮助我理解的参考吗?@ USER 340591你知道C++中的引用是什么吗?但是<代码> const qStand和<代码>仍然是一个参考,对吧?我不确定!我很肯定QML不使用Qchange来与C++交换数据。<代码> const qStand和<代码>是一个引用。发音为“引用常量QString”