在做回QMeta调的过程中遇到这个问题,但是有的函数就成功了,有的不行,怎么改都是提示QMetaObject::invokeMethod: No such method
QObject* obj = temp.caller;
QByteArray slotName = temp.slotName;
if(obj != NULL && !slotName.isEmpty()){
bool ok;//记录调用槽是否成功
int parameterCount = obj->metaObject()->method(obj->metaObject()->indexOfMethod(slotName)).parameterTypes().length();
QRegExp reg("^[^(]+");
reg.indexIn (slotName);
slotName = reg.cap (0).toLatin1 ();
if(parameterCount==0){//如果形参个数为0个
ok = QMetaObject::invokeMethod(obj, slotName);
}
else if(parameterCount==1){
ok = QMetaObject::invokeMethod(obj, slotName, Q_ARG(QByteArray, cmdData));
}
else if(parameterCount==2){
ok = QMetaObject::invokeMethod(obj, slotName, Q_ARG(qint64, seq), Q_ARG(QByteArray, cmdData));
}
else{
ok = false;
}
if(!ok){
qDebug()<