使用qt dbus 传递复杂数据结构的方法
2011-10-27 10:31
330 查看
参考文章http://blog.csdn.net/cuijpus/article/details/2295306 如何用dbus-glib传递复杂的数据结构
经过多次试验 qdbusxml2cpp 对诸如 QList<mystruct> ,QStringList 等高级数据结构支持并不好,无奈之举,只有用 字符数据这个容器来处理,在qt中对应QByteArray
<method name="SayHello">
<arg name="my_rtn" type="ay" direction="out" />
</method>
xml文件中这样写后,qdbusxml2cpp 自动用QByteArray对应 ay ,试验后得知,byte 数组很准确的传递了。
那么,byte数组如何转成我们需要的结构体呢。请参照下面的代码。
发送端:
#pragma pack(push,1)
struct ttt
{
int a;
bool b;
int c;
};
QByteArray Car::SayHello()
{
ttt t1;
t1.a =12; t1.b=true; t1.c=33;
int size=sizeof(t1);
char *pchar=new char(size);
memcpy(pchar,&t1,size);
QByteArray b1;
b1.append(pchar,size);
return b1;
}
//----------------------------------------------
接收端处理:
QByteArray vec;
vec=car->SayHello();
t2=(ttt*)vec.data();
以上都是 qdbus的 adapter与 interface方式
经过多次试验 qdbusxml2cpp 对诸如 QList<mystruct> ,QStringList 等高级数据结构支持并不好,无奈之举,只有用 字符数据这个容器来处理,在qt中对应QByteArray
<method name="SayHello">
<arg name="my_rtn" type="ay" direction="out" />
</method>
xml文件中这样写后,qdbusxml2cpp 自动用QByteArray对应 ay ,试验后得知,byte 数组很准确的传递了。
那么,byte数组如何转成我们需要的结构体呢。请参照下面的代码。
发送端:
#pragma pack(push,1)
struct ttt
{
int a;
bool b;
int c;
};
QByteArray Car::SayHello()
{
ttt t1;
t1.a =12; t1.b=true; t1.c=33;
int size=sizeof(t1);
char *pchar=new char(size);
memcpy(pchar,&t1,size);
QByteArray b1;
b1.append(pchar,size);
return b1;
}
//----------------------------------------------
接收端处理:
QByteArray vec;
vec=car->SayHello();
t2=(ttt*)vec.data();
以上都是 qdbus的 adapter与 interface方式
相关文章推荐
- QT使用QJson生成解析,简单的JSON,复杂的Json使用方法
- 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法
- 如何用dbus-glib传递复杂的数据结构?hacker的误解。
- 意图(Intent)讲解3:安卓使用意图(Intent)全局变量方法传递数据
- Qt(4):Qt下使用Qwt库的方法
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)
- 使用WinRar将Qt编译生成的exe和依赖的dll文件打包为一个exe文件的简单方法
- jquery与后台交互,传递json对象的使用方法
- Qt中使用timer有简单方法
- 使用Qt创建透明盒不规则窗口的方法
- ubuntu linux下使用Qt连接MySQL数据库的方法
- BUG现象与对应0003 全局数据结构复杂多线程中应该被复制使用
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- 数据结构第二周三种传递方法
- 使用 Post 方法传递数据
- Intent Parcelable 传递ArrayList使用方法
- QT 国际化 结合XML的使用方法
- 通过JNI实现Java向C传递复杂数据结构HashMap<String, String[]>
- VS2010使用qt翻译的方法