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=; 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=; 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 *, > 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的更多相关文章

  1. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  2. C#利用Emit反射实现AOP,以及平台化框架封装思路

    C#利用Emit反射实现AOP,以及平台化框架封装思路 这是前两天扒的一段动态代理AOP代码,用的Emit反射生成子类来实现代理模式,在这里做个小笔记,然后讨论一下AOP框架的实现思路. 首先是主函数 ...

  3. 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

    有时遇到将数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串 packag ...

  4. 利用JAVA反射机制设计通用的DAO

    利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...

  5. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  6. 利用Java反射根据类的名称获取属性信息和父类的属性信息

    代码: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java ...

  7. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  8. 利用Java反射机制将Bean转成Map

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  9. 利用c#反射实现实体类生成以及数据获取与赋值

    转:http://hi.baidu.com/xyd21c/item/391da2fc8fb351c10dd1c8b8 原有的实体类成员逐个赋值与获取的方法弊端: 1.每次对实体类属性进行赋值时,都要检 ...

随机推荐

  1. vijos P1037搭建双塔

    P1037搭建双塔 Accepted 标签:动态规划 背包     描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件, ...

  2. VB.NET 小程序 3

    Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...

  3. sharepoint 2013 "The module ... owssvr.dll could not be loaded due to a configuration problem"

    打开sharepoint站点可以看到这个503的错误, 在event viewer中查看如下: The Module DLL 'C:\Program Files\Common Files\Micros ...

  4. ruby学习--varaible

    #全局变量 $global_variable=10 class Class1 def print_global() puts "Global variable in Class1 is #{ ...

  5. js实现遮罩以及弹出可移动登录窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. disucz!NT 3.5.0 验证码点击不能变化只是样式变化

    来博客园这么久了,第一次写博客啊!公司有个论坛10年没动了,是discuz!NT 3.5.0版本的,由于验证码不能变化老是被人刷.网上找了很多资料根本没有.可能有同行下次也会遇到这样的问题,我就把我的 ...

  7. LINUX下查看php运行的用户

    <?php echo shell_exec("id -a"); ?> 打开网页,显示 uid=2(daemon) gid=2(daemon) groups=2(daem ...

  8. (转)Yale CAS + .net Client 实现 SSO(2)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 1. 下载 CAS 及.NET CAS client. CAS下载地址:http://www.jasig.org/cas/download ...

  9. Regionals 2013 :: North America - Southeast USA

    Regionals 2013 :: North America - Southeast USA It Takes a Village As a Sociologist, you are studyin ...

  10. 第二章 开始学习C++

    第二章  开始学习C++ 2.1  main函数 简单代码如下: #include <iostream> int main() { //This is my first program u ...