首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用可变参数量调用QMetaObject::invokeMethod()

用可变参数量调用QMetaObject::invokeMethod()
EN

Stack Overflow用户
提问于 2011-10-11 05:59:44
回答 1查看 10.5K关注 0票数 4

我现在正在移植FitNesse的Slim服务器,我现在有点卡住了。我得到的是像这样的字符串:

代码语言:javascript
复制
("id_4", "call", "id", "setNumerator", "20")
("id_5", "call", "id", "setSomethingElse", "10", "8")

其中"setNumerator“和"setSomethingElse”是应该调用的方法的名称,"20“、"10”和"8“是我要传递的参数。

所以我现在的问题是,我不知道如何为这两种方法使用one调用invokeMethod。我目前的解决办法如下:

代码语言:javascript
复制
//(if instructionLength==5)
metaObj->invokeMethod(className, methodName.toAscii().constData(), Qt::DirectConnection,
                                          Q_ARG(QVariant, instructions.at(index).at(4)))

//(if instructionLength==6)
metaObj->invokeMethod(className, methodName.toAscii().constData(), Qt::DirectConnection, Q_RETURN_ARG(QVariant, retArg),
                                          Q_ARG(QVariant, instructions.at(index).at(4)),
                                          Q_ARG(QVariant, instructions.at(index).at(5)))

等等..。

因此,一方面,似乎每个invokeMethod调用都需要非常具体的信息,这使得使用可变数量的参数很难做到这一点。另一方面,必须有一个方法,所以我不必做同样的事情两次(或以后:十次)。

所以问题是,有别的方法可以用一个电话吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-11 06:26:04

如果您查看函数定义,您将看到只有一个版本:

代码语言:javascript
复制
bool QMetaObject::invokeMethod ( QObject * obj, const char * member, QGenericArgument val0 
    = QGenericArgument( 0 ), QGenericArgument val1 = QGenericArgument(), QGenericArgument 
    val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), 
    QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = 
    QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 
    = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument 
    val9 = QGenericArgument() )

在你的情况下,我会这样做:

代码语言:javascript
复制
QGenericArgument argumentTable[ 10 ];

... Fill up your data

QMetaObject::invokeMethod( objet, functionName, argumentTable[ 0 ], argumentTable[ 1 ],
    argumentTable[ 2 ], ... argumentTable[ 9 ] );

不使用的参数将被默认初始化,这是默认行为

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

https://stackoverflow.com/questions/7721923

复制
相关文章

相似问题

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