- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在移植 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/
我有一个 java 对象的实例,假设有一个名为 myList 的 ArrayList 实例。 对于此特定实例,我想覆盖 invokeMethod 方法以(例如)记录调用该方法。 我可以做这样的事情:
我在项目中有基类A A继承了很多子类 public class A { public void Process(string myString1, int myInt1 )
我注意到 Groovy MetaClass 的一些奇怪行为,我想知道是否有人可以给我一些关于这里发生的事情的线索。 这工作正常: @Override Object invokeMethod(Strin
我想使用QMetaObject::invokeMethod来调用一个对象的方法(稍后它会在另一个线程中运行,然后invokeMethod就派上用场了)。我在 Python 3.3 上使用 PySide
我使用以下代码来避免使用 switch 语句来决定调用哪个方法,它只与我设置的 BindingFlags 标志一起工作,没有 InvokeMethod。 InvokeMethod 的实际含义是什么,为
我的类中有一个方法调用QMetaObject::invokeMethod。来自documentation我读到使用 Qt::DirectConnection 应该立即调用插槽。在我的代码中,我似乎体验
是否可以调用静态方法? 我正在使用: QMetaObject::invokeMethod(this ,strThread.toLatin1()
这是我要调用的方法的原型(prototype): const QString& FieldForm::getTitle(void) const; 我必须通过 Qt 函数调用此方法:invokeMeth
我正在尝试调试一段代码,该代码更新用于 Windows 服务的凭据,该服务未运行。它不会抛出异常,它只是没有通过检查以表明它已被应用。 MSDN对构造函数的描述如下: public Object In
我目前正在移植 FitNesse 的 Slim 服务器,但我现在有点卡住了。我得到的是像这样的字符串: ("id_4", "call", "id", "setNumerator", "20") ("i
我正在用 Qt 做一个项目,其中 invoke 方法在单独的线程上运行并从主线程调用。如果我将 QByteArray 作为 const 传递,它会构建并运行。但是,如果我删除它构建的 const 但在
这是 QMetaObject::invokeMethod doesn't find the method 的跟进.调用没有参数的方法是有效的。但是将前面的问题扩展到带参数的方法让我再次失败。 请参阅以
我正在开发一个小型 Flutter 应用程序,我在其中使用 native 库进行一些计算。 dart 和 java(在 android 上)之间的通信是双向的,为此使用 methodChannels。
我有一个父类(super class)Common,它继承自QObject。然后我得到了一个类Item,它继承自Common。 Common.h class Common : public QObje
我有以下代码: class A : public QObject { Q_OBJECT public: A() : QObject() { moveToThr
...从静态类和非主线程调用。 简而言之,我有一个类“sapp”,它有另一个静态类“tobj”作为静态成员。为了避免静态订单初始化失败,tobj 在 sapp 的方法中声明,该方法又返回 tobj 实
在 Groovy 中,invokeMethod 和 methodMissing 方法之间的主要区别是什么?是否有明确的指导原则,何时应该优先使用其中一个? 最佳答案 何时使用什么:始终使用 metho
除了QMetaObject::invokeMethod是否有任何类型安全的方式来异步调用方法/插槽(也就是在 GUI 线程中排队执行)? QMetaObject::invokeMethod没有对函数名
我想从下面给定的类调用groovy方法 package infa9 import java.io.BufferedReader; import java.io.IOException; import
我正在尝试找出 QMetaObject::invokeMethod 的用法。我有一个函数,它有一个参数(非 const QString),我希望它是输出,该函数没有返回值,对其调用 invokeMet
我是一名优秀的程序员,十分优秀!