メソッドにこのようなオプションのパラメーター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 and
bool」ではなく、カスタムクラスの名前空間に問題があることがわかりました。私は迅速で汚い解決策を書きました。
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()));
}
しかし、これは非常に非常に汚いようです。この問題を処理するための良い解決策はありますか?