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 を 2 番目の引数に渡そうとしていますが、それはconst char*. 暗黙的な変換がないため、適切な型に変換してください。最初に変換する方法を決定する必要があるQByteArrayため、これは潜在的に書くことができる1つの例です:

QMetaObject::invokeMethod(object, func.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QVariant, p1), Q_ARG(QVariant, p2));
于 2014-04-21T12:47:20.627 に答える
0

私は同じ質問に会いました。私の問題は実際には他の要因によって引き起こされています。プログラムの 1 つを 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 に答える