目录

参数类型 QDBusVariant   ,Variant

参数类型QList<QVariant>

参数类型QVariantMap

参数类型QMap<QString, QString>,>

参数struct


D-Feet是dbus常用的调试工具,可以方便的向DBUS服务传递数据。

如果有不会传递的参数也可以留言,我会尽快更新博客以及代码。

D-feet使用python编写的工具,因此他的数据传递需要传递python的数据格式。对于复杂类型需要如何传递呢?

主界面

调用界面

参数类型 QDBusVariant   ,Variant

填写内容

__import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("s","aaa")

函数接口:

void DBUSServer::TestDBUSVariant(QDBusVariant value)
{qInfo() << __FUNCTION__ << value.variant();
}

运行结果

TestDBUSVariant QVariant(QString, "aaa")

参数类型QList<QVariant>

variant列表类型

[__import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("s", "aaa"),__import__('gi.repository.GLib', globals(),locals(), ['Variant']).Variant("i", 123)]

QT测试代码:

void DBUSServer::TestListVariant(QList<QVariant> lists)
{qInfo() << __FUNCTION__ << lists;
}

结果:

参数类型QVariantMap

传递参数

 {"asdfa": __import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("s", "aaa")}

Qt测试代码

void DBUSServer::TestMapVariant(QVariantMap value)
{qInfo() << __FUNCTION__ << value;
}

运行结果:

TestMapVariant QMap(("asdfa", QVariant(QString, "aaa")))

参数类型QMap<QString, QString>

QMap<QString, QString>在使用之前需要注册
qDBusRegisterMetaType<QMap<QString, QString>>();

传递参数:

 {"asdf2":"1asdf","asdf3":"vvv"}

QT测试代码:

void DBUSServer::TestMapQSring(QMap<QString, QString> value)
{qInfo() << __FUNCTION__ << value;
}

运行结果:

TestMapQSring QMap(("asdf2", "1asdf")("asdf3", "vvv"))

参数struct

绑定的时候使用QVariant


conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestStruct", this,SLOT(TestStruct(QVariant)));
struct Persion {QString Name;int age;
};void DBUSServer::TestStruct(Persion value)
{qInfo() << __FUNCTION__ << value.Name;qInfo() << __FUNCTION__ << value.age;
}

参数调用

__import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("(si)",("asdf",123))

运行结果

TestStruct "asdf"
TestStruct 123

源码传送门

https://gitcode.net/arv002/qt/-/tree/master/DBUS/DFeetTest

#include "dbus_server.h"
#include <QDBusMetaType>
#include <QMap>
DBUSServer::DBUSServer(QObject *parent): QObject(parent)
{QDBusConnection conn = QDBusConnection::sessionBus();bool res = conn.registerService(DBUS_NAME);qInfo() << "res1:" << res;res = conn.registerObject(DBUS_PATH, this,QDBusConnection ::ExportNonScriptableSlots |QDBusConnection::ExportAllSignal);qInfo() << "res1:" << res;qDBusRegisterMetaType<Persion>();qDBusRegisterMetaType<QMap<QString, QString>>();conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestInt", this,SLOT(TestInt(int)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestString", this,SLOT(TestString(QString)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestVraint", this,SLOT(TestVraint(QVariant)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestDBUSVariant",this, SLOT(TestDBUSVariant(QDBusVariant)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestListVariant",this, SLOT(TestListVariant(QList<QVariant>)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestMapVariant",this, SLOT(TestMapVariant(QVariantMap)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestStruct", this,SLOT(TestStruct(QVariant)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestStruct", this,SLOT(TestStruct(QVariant)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestListInt", this,SLOT(TestListInt(QList<int>)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestListString",this, SLOT(TestListString(QStringList)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME,"TestQDBusObjectPath", this,SLOT(TestQDBusObjectPath(QDBusObjectPath)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestQDBusSignature",this, SLOT(TestQDBusSignature(QDBusSignature)));conn.connect(QString(DBUS_NAME), DBUS_PATH, DBUS_NAME, "TestMapQSring",this, SLOT(TestMapQSring(QMap<QString, QString>)));
}
QDBusArgument &operator<<(QDBusArgument &argument, const Persion &mystruct)
{argument.beginStructure();argument << mystruct.Name << mystruct.age;argument.endStructure();return argument;
}// Retrieve the MyStructure data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument,Persion &mystruct)
{argument.beginStructure();argument >> mystruct.Name >> mystruct.age;argument.endStructure();return argument;
}
// 123
void DBUSServer::TestInt(int value) { qInfo() << __FUNCTION__ << value; }
// "asdf"
void DBUSServer::TestString(QString value) { qInfo() << __FUNCTION__ << value; }
/*
[__import__('gi.repository.GLib', globals(), locals(),['Variant']).Variant("s", "aaa"),__import__('gi.repository.GLib', globals(),
locals(),['Variant']).Variant("i", 123)]
*/
void DBUSServer::TestListVariant(QList<QVariant> lists)
{qInfo() << __FUNCTION__ << lists;
}
/*{"asdfa": __import__('gi.repository.GLib', globals(), locals(),['Variant']).Variant("s", "aaa")}*/
void DBUSServer::TestMapVariant(QVariantMap value)
{qInfo() << __FUNCTION__ << value;
}
/*{"asdf":"asdf","asdf","vvv"}
*/
void DBUSServer::TestMapQSring(QMap<QString, QString> value)
{qInfo() << __FUNCTION__ << value;
}
/*__import__('gi.repository.GLib', globals(), locals(),['Variant']).Variant("(si)",("asdf",123))*/
void DBUSServer::TestStruct(Persion value)
{qInfo() << __FUNCTION__ << value.Name;qInfo() << __FUNCTION__ << value.age;
}
// 传递路径
void DBUSServer::TestQDBusObjectPath(QDBusObjectPath value)
{qInfo() << __FUNCTION__ << value.path();
}
// 传递函数参数签名。传递{ss}会崩溃
void DBUSServer::TestQDBusSignature(QDBusSignature value)
{qInfo() << __FUNCTION__ << value.signature();
}void DBUSServer::TestVariant(QString value)
{qInfo() << __FUNCTION__ << value;
}
/*
__import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("s",
"aaa")
*/
void DBUSServer::TestDBUSVariant(QDBusVariant value)
{qInfo() << __FUNCTION__ << value.variant();
}
// [123,312,123]
void DBUSServer::TestListInt(QList<int> value)
{qInfo() << __FUNCTION__ << value;
}
// ["123","312","123"]
void DBUSServer::TestListString(QStringList value)
{qInfo() << __FUNCTION__ << value;
}

D-Feet的复杂类型使用攻略(DBUS)相关推荐

  1. 监控摄像机选型攻略之技术类型选用

    从技术现状分析我们知道,目前主要有三大类监控技术类型:模拟技术.非压缩数字技术.压缩数字技术(网络技术).那么如何选用?这需要根据实际情况选用. 模拟技术:适用高清升级 模拟技术中,由于处于产品淘汰升 ...

  2. Algorithm:数学建模大赛(国赛和美赛)的简介/内容、数学建模做题流程、历年题目类型及思想、常用算法、常用工具之详细攻略

    Algorithm:数学建模大赛(国赛和美赛)的简介/内容.数学建模做题流程.历年题目类型及思想.常用算法.常用工具之详细攻略 目录 国内数学建模大赛简介 1.本科生数学建模大赛 2.研究生数学建模大 ...

  3. Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略

    Database:Database数据库的简介.类型及其区别(关系数据库VS非关系型数据库).案例应用之详细攻略 目录 Database数据库的简介 1.掌握数据库的方法-学会sql语言进而学会增.删 ...

  4. Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)

    Competition--AI:国内外人工智能比赛平台以及竞赛类型.竞赛题目.举行时间等之详细攻略(最全+ing) tips (1).可以在各大比赛平台指定的讨论区,或者github网站上,找到历届选 ...

  5. 3dmax:3dmax三维VR渲染设置(VR发光贴图、VR灯光缓存、V-Ray焦散,渲染图中出现黑斑点的原因、插值类型)之详细攻略

    3dmax:3dmax三维VR渲染设置(VR发光贴图.VR灯光缓存.V-Ray焦散,渲染图中出现黑斑点的原因.插值类型)之详细攻略 目录 [VR发光贴图] 1.渲染图中出现黑斑点.杂点的几个原因: 1 ...

  6. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置—灯光类型、阴影贴图、区域阴影、强度颜色衰减、衰退、远距衰减、聚光灯参数、大气和效果mental ray间接照明)图文教程之详细攻略

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置-灯光类型.阴影贴图.区域阴影.强度颜色衰减.衰退.远距衰减.聚光灯参数.大气和效果mental ray间接照明)图文教程之详细攻略 ...

  7. 项目经理如何管理不同类型员工的扯皮攻略

    项目经理如何管理不同类型员工的扯皮攻略 一.如何管理不得力型员工 ●用宽容之心对待不得力的员工 ●用关爱之心激励不得力的员工 ●用真诚之心感化不得力的员工 ●以公平而严格的竞争和淘汰机制鞭策工作不得力 ...

  8. C++ decltype类型推导完全攻略

    C++ decltype类型推导完全攻略 decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"decla ...

  9. 项目经理如何管理不同类型员工的扯皮攻略 1

    项目经理如何管理不同类型员工的扯皮攻略 一.如何管理不得力型员工 ●用宽容之心对待不得力的员工 ●用关爱之心激励不得力的员工 ●用真诚之心感化不得力的员工 ●以公平而严格的竞争和淘汰机制鞭策工作不得力 ...

  10. 东京迪斯尼海洋乐园攻略_迪士尼乐园-软件工程师的观点

    东京迪斯尼海洋乐园攻略 So, we went to Disneyland last week.  It was my first time.  Personally I was a little i ...

最新文章

  1. 提升Hadoop计算能力的并行框架
  2. 【2016-09-27-DP小练】
  3. 桥牌笔记:三个输墩压缩为一个
  4. iOS 关于.tbd与.dylib用法
  5. Java未将对象引用设置到对象的实例
  6. 《机器学习概论》习题答案
  7. 禁止访问磁盘的注册表
  8. Mac系统搭建java开发环境
  9. [RHEL5企业级Linux服务攻略]--第5季 Sendmail服务全攻略之高级配置
  10. 使用Python将数据插入数据库(一)
  11. linux wifi驱动rtl8188移植
  12. 2022年 MathorCup 思路分享
  13. 使用阿里云邮件推送服务群发邮件
  14. dw自动滚动图片_Dreamweaver实现滚动图片文字
  15. 用什么软件测试高考成绩,优志愿、知涯升学等志愿填报软件测评出来啦!最好用的是这个...
  16. 使用Dl4j训练的一个手写数字识别软件
  17. CSDN超级实习生计划学习打卡—— Ipv6
  18. 2011年国内手机市场如何推演?
  19. 水仙花数(Java实现)
  20. IE出现“XMLHttpRequest: 网络错误 0x80070005, 拒绝访问”的解决方案

热门文章

  1. java excel转pdf
  2. 【横向移动】内网渗透之内网信息收集
  3. java读取并导出多类型数据csv文件
  4. 360°视频论文调研
  5. 保温杯哪种材质最好_玻璃杯材质分为哪几种 玻璃杯什么材质最好
  6. 微信发红包测试点整理
  7. 用c语言实现动态优先权调度,实验四使用动态优先权的进程调度算法的模拟..doc...
  8. Matlab图形中输入希腊字母
  9. 随机生成小球(HTML5)
  10. 如何知道计算机是否支持64位,查看CPU是否支持64位操作系统的简单方法