Это код:
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()
с указателем, но компилятор жалуется, что это ссылка на указатель.
Вы пытаетесь передать 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)'
и я вижу вывод компиляции, сообщение об ошибке,
note: no known conversion for argument 1 from 'QDialog*' to 'QObject*'
вдруг я понял, что не объявляю Qdialog.
Я думаю, что QT иногда не может дать действительно хороший вывод ошибки компиляции.