没有匹配的函数来调用 - 编译器说我在调用时调用(QObject *&)(QObject *)

时间:2014-04-21 12:35:47

标签: c++ qt qtcore qt-signals qmetaobject

这是代码:

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(),但编译器抱怨它是一个指针引用。

2 个答案:

答案 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有时候不能给出一个非常好的编译错误输出。