gpt4 book ai didi

c++ - 使用可变数量的参数调用 QMetaObject::invokeMethod()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:34 25 4
gpt4 key购买 nike

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

("id_4", "call", "id", "setNumerator", "20")
("id_5", "call", "id", "setSomethingElse", "10", "8")

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

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

//(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 调用都需要非常具体的信息,这使得使用可变数量的参数很难做到这一点。另一方面,必须有一种方法,这样我就不必做同样的事情两次(或以后:十次)。

所以问题是,有没有另一种方法可以通过一次调用来完成?

最佳答案

如果您查看函数定义,您会发现只有一个版本:

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

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

QGenericArgument argumentTable[ 10 ];

... Fill up your data

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

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

关于c++ - 使用可变数量的参数调用 QMetaObject::invokeMethod(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com