Нет соответствующей функции для вызова-компилятор говорит, что я вызываю (QObject *&), когда вызов (QObject *)
Это код:
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 ответа:
Вы пытаетесь передать QString второму аргументу, тогда как это должно быть
const char*
. Преобразуйте его в правильный тип, поскольку неявного преобразования не существует. Сначала вам нужно решить, каким образом преобразовать его вQByteArray
, поэтому это один из примеров, который вы потенциально можете написать:QMetaObject::invokeMethod(object, func.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QVariant, p1), Q_ARG(QVariant, p2));
Я уже сталкивался с тем же вопросом. и моя проблема на самом деле вызвана другими факторами. Я перемещаю одну из моих программ с QT 4 на QT 5, и я не объявлял QDialog явно, поэтому, когда я вызываю метод, возникает ошибка:
error: no matching function for call to 'QMetaObject::invokeMethod(QDialog*&, const char [12], Qt::ConnectionType)'
И я вижу результат компиляции, сообщение об ошибке,
Внезапно я понял, что не объявляю Qdialog. QT иногда не может дать действительно хороший результат ошибки компиляции, я думаю.note: no known conversion for argument 1 from 'QDialog*' to 'QObject*'