码迷,mamicode.com
首页 > Web开发 > 详细

利用QObject反射实现jsonrpc

时间:2015-10-08 18:17:05      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

1.jsonrpc请求中的params数组生成签名
   static QString signatureFromJsonArray(const QJsonArray &array)
    {
        QStringList list;
        foreach(const QJsonValue &v, array)
        {
            list<<JSTypeToString(v.type());
        }
        return list.join(",");
    }

 

 
2.QObject对象内的方法生成签名
static QString signatureFromMethod(const QMetaMethod &method)
    {
        QStringList list;
        for(int i=0; i<method.parameterCount(); i++)
        {
            int type = method.parameterType(i);
            list<<JSTypeToString(convertVariantTypeToJSType(type));
        }
        return list.join(",");
    }

 

 
3.查找QObject实例中的签名(略),相同则调用
    static QVariantList createParameterVariantList(const QMetaMethod &method, const QJsonArray &array)
    {
        QVariantList varList;
        for(int i=0; i<method.parameterCount(); i++)
        {
            int type = method.parameterType(i);
            QVariant v= convertJSValueToVariant(type, array.at(i));
            varList.append(v);
        }
        return varList;
    }
 
    static QVariant invoke(QObject* object, const QMetaMethod &method, const QJsonArray &params)
    {
        QVarLengthArray<void *, 10> invokeParams;
        //压入返回值,参数
        int returnType = method.returnType();
        if (returnType==QMetaType::Void)
        {
            returnType = QMetaType::UnknownType;
        }
        QVariant returnValue(returnType, nullptr);
        invokeParams.append(returnValue.data());
        //压入参数
        QVariantList varList = createParameterVariantList(method, params);
        foreach(const QVariant &v, varList)
        {
            invokeParams.append(const_cast<void *>(v.constData()));
        }
        //调用
        object->qt_metacall(QMetaObject::InvokeMetaMethod, method.methodIndex(), invokeParams.data());
        return returnValue;
    }
关键代码行:object->qt_metacall(QMetaObject::InvokeMetaMethod, method.methodIndex(), invokeParams.data());

利用QObject反射实现jsonrpc

标签:

原文地址:http://www.cnblogs.com/danju/p/4861538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!