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. .NET下实现分布式缓存系统Memcached (转自网络)

    Memcached在.NET中的应用 一.Memcached服务器端的安装(此处将其作为系统服务安装) 下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, ...

  2. Programmer's Jokes

    1.   一天, 下着小雨, 和同事们一起去上班,一位同事差点滑倒,另一位同事笑话说:如果人走路用爬的就不会摔倒了!   遂反问他:能用两行代码搞定的事情为什么要用4行呢? 2.  有趣的公式( Fr ...

  3. 一个WebForm中连接SQL Server的例子

    .cs using System; using System.Collections; using System.ComponentModel; using System.Data; using Sy ...

  4. @Register指令

    @Register指令用来创建标记前缀和自定义控件之间的关联,这为开发人员提供了一种在ASP.NET应用程序文件(包括网页.用户控件和母板页)中引用自定义控件的简单方法. <%@Register ...

  5. oracle发送邮件

    1.创建发送邮件的存储过程 CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人 p_subject VARCHAR ...

  6. PHP使用COM 获取RTF内容

    1. 需要在APP服务器上安装Office 2. 可能需要创建文件夹:Desktop C:\Windows\SysWOW64\config\systemprofile\Desktop 3. 可能需要设 ...

  7. cocos2d-x中Node与Node层级架构

    Cocos2d-x采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结构中的节 ...

  8. 【Unity3D实战】摇摆直升机开发实战(一)

    [Unity3D实战]摇摆直升机开发实战(一) 1.点击[Assets],创建[Sprites]和[Resources]文件夹,然后将所需要的素材导入[Sprites]文件夹中. 2.找到[Sprit ...

  9. CityEngine2012(32位)安装

    今天下午把CityEngine2012装好了,既然Esri大力推CityEngine作为其三维建模软件,那就学习一下,还好没花多长时间搞定破解版,以前装Erdas,南方CASS,AutoCAD那些该死 ...

  10. linux网络编程中阻塞和非阻塞socket的区别

    读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回.当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数.当 ...