Нет соответствующей функции для вызова — компилятор говорит, что я вызываю (QObject * & amp;), когда вызывается (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));
2

Другие решения

Я встречался с тем же вопросом. и моя проблема на самом деле вызвана другими факторами. Я перемещаю одну из моих программ из 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 иногда не может дать действительно хороший вывод ошибки компиляции.

0

По вопросам рекламы [email protected]