首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QMetaObject::invokeMethod和多个候选消除歧义

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

Stack Overflow用户
提问于 2015-08-25 13:33:23
回答 1查看 154关注 0票数 0

我想知道是否可以使用QMetaObject::invokeMethod调用一个方法,如果该方法具有像这样的可选参数

代码语言:javascript
复制
class Foo {
    Q_INVOKABLE void myMethod(int a, bool b = true);
}

我试过:

代码语言:javascript
复制
QMetaObject::invokeMethod(foo, "myMethod", Q_ARG(int, 42), Q_ARG(bool, true));

但是输出告诉我(当然)有多个候选

代码语言:javascript
复制
Candidates are:
    myMethod(int,bool)
    myMethod(int)

是否有可能消除invokeMethod的歧义,所以我一定要调用myMethod(int,bool)

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

代码语言:javascript
复制
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()));
}

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

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 14:53:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32205449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档