目录

参数类型 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. 二手服务器cpu性能,二手服务器cpu当主机
  2. 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序
  3. NOIP2018 模拟 9.11
  4. python trim函数_python strip()函数 介绍
  5. php 删除文件时间,php删除文件后重建,文件创建时间(filectime)未变化怎么解决??...
  6. 返岗上班应该注意什么?五个细节必须牢记
  7. nodejs 从TCP套接字读取并解析数据
  8. 开源的自然语言处理工具
  9. windows API 菜鸟学习之路(二)
  10. python中的for in 语句_2、python,for..in语句
  11. paip.vs2010 开发ASP浏览时的设置
  12. 使用EDD枚举域数据
  13. 轻松搞懂Linux中程序、进程、服务的区别及操作命令
  14. T32 连接PLC与调试器,使用python可以操纵调试器
  15. python制作图表放入excel_python- xlsxwriter模块使用(拓展:Excel插入图表)
  16. 黑马程序员Netty全套教程,全网最全Netty深入浅出教程,Java网络编程的王者
  17. 第二阶段:数据库设计与初始化
  18. Lancet子刊:预测婴儿自闭症:进展与挑战
  19. 应用程序无法正常启动(oxc000007b)
  20. mongoDb内嵌文档的数据查询

热门文章

  1. zipException error in opening zip file
  2. centos7安装netspeeder教程
  3. 荣耀8桌面添加计算机,华为荣耀手机如何添加快捷开关到快捷功能界面中
  4. win7 ShuipFCMS 配置 及问题
  5. SparkSql create table导入本地excel
  6. Error in Summary.factor ‘min’ not meaningful for factors
  7. Java源码阅读绘图规范手册--[捷特版]
  8. php 时间和日期,php 日期和时间
  9. 最新触摸精灵开发教程(价值300
  10. 《谷物大脑》书中的精髓:如何通过四星期行动计划打造健康身体?