我想知道是否可以使用 调用方法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)
?
编辑:我发现这是自定义类的名称空间问题,而不是“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()));
}
但这似乎非常非常肮脏。任何人都有一个很好的解决方案来处理这个问题?