2

这是代码:

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

4

2 回答 2

2

您正在尝试将 QString 传递给第二个参数,而应该是const char*. 将其转换为正确的类型,因为没有隐式转换。您需要决定首先将其转换为哪种方式QByteArray,因此这是您可能编写的一个示例:

QMetaObject::invokeMethod(object, func.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QVariant, p1), Q_ARG(QVariant, p2));
于 2014-04-21T12:47:20.627 回答
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 有时不能给出真正好的编译错误输出。

于 2014-09-13T06:36:20.417 回答