使用QMetaObject :: invokeMethod和多个候选者消除歧义

时间:2015-08-25 13:33:24

标签: qt qmetaobject

我想知道是否可以使用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)

编辑:我发现自定义类的命名空间是一个问题,而不是“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()));
}

但这似乎非常非常脏。任何人都有一个很好的解决方案来处理这个问题吗?

1 个答案:

答案 0 :(得分:0)

还没有“好的解决方案”。始终完全限定信号/插槽的参数以及匹配的基于字符串的connect()invokeMethod()。长话以来,查找是通过字符串比较完成的,因此您需要完美匹配。