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

Qt 使用QMetaObject::invokeMethod和多个候选项消除歧义,qt,qmetaobject,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)); 但输出结果告诉我,当然有多个候选者: 有没有可能消除invokeMethod的歧义

我想知道是否可以使用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));
但输出结果告诉我,当然有多个候选者:

有没有可能消除invokeMethod的歧义以便我确定调用myMethodint,bool

编辑:我发现这是自定义类的名称空间问题,而不是ìntandbool`。我写了一个又快又脏的解决方案

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()));
}

但这看起来很脏。有人找到解决这个问题的好办法吗?

目前还没有好办法。始终将参数完全限定为信号/插槽以及匹配的基于字符串的connect和invokeMethod。说来话长,查找是通过字符串比较完成的,因此您需要一个完美匹配。

您是否尝试将参数传递给方法签名?myMethodbar::A,blop::B?
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()));
}