这是代码:
void invokeQMLFunction2Arg(QObject * object, QString func, QVariant p1, QVariant p2) {
QMetaObject::invokeMethod(object, func, Qt::DirectConnection, Q_ARG(QVariant, p1), Q_ARG(QVariant, p2));
}
这是错误:
error: no matching function for call to 'QMetaObject::invokeMethod(QObject*&, QString&, Qt::ConnectionType, QArgument<QVariant>, QArgument<QVariant>)'
我错过了什么?我用一个指针调用invokeMethod()
,但编译器抱怨它是一个指针引用。
答案 0 :(得分:2)
您正在尝试将QString传递给第二个参数,而那应该是const char*
。将其转换为正确的类型,因为没有隐式转换。您需要首先确定将其转换为QByteArray
的方式,因此这是您可能写的一个示例:
QMetaObject::invokeMethod(object, func.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QVariant, p1), Q_ARG(QVariant, p2));
答案 1 :(得分:0)
我遇到了同样的问题。我的问题实际上是由其他因素引起的。我将我的一个程序从QT 4移到QT 5,并且我没有明确声明QDialog,所以当我调用该方法时,会出现错误:
error: no matching function for call to 'QMetaObject::invokeMethod(QDialog*&, const char [12], Qt::ConnectionType)'
我看到编译输出,错误信息是,
note: no known conversion for argument 1 from 'QDialog*' to 'QObject*'
突然,我意识到我没有宣布Qdialog。
我认为QT有时候不能给出一个非常好的编译错误输出。