我想知道是否可以使用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)?
编辑:我发现这是自定义类名称空间的问题,而不是μ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()));
}但这看起来很脏。有谁能找到解决这个问题的好办法?
发布于 2015-08-25 14:53:38
目前还没有“好的解决方案”。始终将参数完全限定为信号/插槽以及匹配的基于字符串的connect()和invokeMethod()。长话短说,查找是通过字符串比较完成的,所以您需要一个完美的匹配。
https://stackoverflow.com/questions/32205449
复制相似问题