0

メソッドにこのようなオプションのパラメーターQMetaObject::invokeMethodがある場合、メソッドを で呼び出すことができるかどうか疑問に思います。

class Foo {
    Q_INVOKABLE void myMethod(int a, bool b = true);
}

私が試してみました :

QMetaObject::invokeMethod(foo, "myMethod", Q_ARG(int, 42), Q_ARG(bool, true));

しかし、出力は(もちろん)複数の​​候補があることを示しています:

Candidates are:
    myMethod(int,bool)
    myMethod(int)

曖昧さをなくすことは可能invokeMethodですmyMethod(int,bool)か?

EDIT:「nt andbool」ではなく、カスタムクラスの名前空間に問題があることがわかりました。私は迅速で汚い解決策を書きました。

class Foo {
    Q_INVOKABLE void myMethod(bar::A a, blop::B b = blop::B::Default);
}

// When I need to call invokeMethod
auto success = QMetaObject::invokeMethod(foo, "myMethod", Q_ARG(A, A()),
                                             Q_ARG(B, B()));
if(!success) {
    QMetaObject::invokeMethod(foo, "myMethod", Q_ARG(bar::A, bar::A()),
                                             Q_ARG(blop::B, blop::B()));
}

しかし、これは非常に非常に汚いようです。この問題を処理するための良い解決策はありますか?

4

1 に答える 1

0

「良い解決策」はまだありません。シグナル/スロットおよび一致する文字列ベースのconnect()andへの引数を常に完全に修飾しますinvokeMethod()。長い話は、ルックアップは文字列の比較によって行われるため、完全に一致する必要があるということです。

于 2015-08-25T14:53:38.283 に答える