D-Feet的复杂类型使用攻略(DBUS)
目录
参数类型 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)相关推荐
- 监控摄像机选型攻略之技术类型选用
从技术现状分析我们知道,目前主要有三大类监控技术类型:模拟技术.非压缩数字技术.压缩数字技术(网络技术).那么如何选用?这需要根据实际情况选用. 模拟技术:适用高清升级 模拟技术中,由于处于产品淘汰升 ...
- Algorithm:数学建模大赛(国赛和美赛)的简介/内容、数学建模做题流程、历年题目类型及思想、常用算法、常用工具之详细攻略
Algorithm:数学建模大赛(国赛和美赛)的简介/内容.数学建模做题流程.历年题目类型及思想.常用算法.常用工具之详细攻略 目录 国内数学建模大赛简介 1.本科生数学建模大赛 2.研究生数学建模大 ...
- Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略
Database:Database数据库的简介.类型及其区别(关系数据库VS非关系型数据库).案例应用之详细攻略 目录 Database数据库的简介 1.掌握数据库的方法-学会sql语言进而学会增.删 ...
- Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
Competition--AI:国内外人工智能比赛平台以及竞赛类型.竞赛题目.举行时间等之详细攻略(最全+ing) tips (1).可以在各大比赛平台指定的讨论区,或者github网站上,找到历届选 ...
- 3dmax:3dmax三维VR渲染设置(VR发光贴图、VR灯光缓存、V-Ray焦散,渲染图中出现黑斑点的原因、插值类型)之详细攻略
3dmax:3dmax三维VR渲染设置(VR发光贴图.VR灯光缓存.V-Ray焦散,渲染图中出现黑斑点的原因.插值类型)之详细攻略 目录 [VR发光贴图] 1.渲染图中出现黑斑点.杂点的几个原因: 1 ...
- 3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置—灯光类型、阴影贴图、区域阴影、强度颜色衰减、衰退、远距衰减、聚光灯参数、大气和效果mental ray间接照明)图文教程之详细攻略
3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置-灯光类型.阴影贴图.区域阴影.强度颜色衰减.衰退.远距衰减.聚光灯参数.大气和效果mental ray间接照明)图文教程之详细攻略 ...
- 项目经理如何管理不同类型员工的扯皮攻略
项目经理如何管理不同类型员工的扯皮攻略 一.如何管理不得力型员工 ●用宽容之心对待不得力的员工 ●用关爱之心激励不得力的员工 ●用真诚之心感化不得力的员工 ●以公平而严格的竞争和淘汰机制鞭策工作不得力 ...
- C++ decltype类型推导完全攻略
C++ decltype类型推导完全攻略 decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"decla ...
- 项目经理如何管理不同类型员工的扯皮攻略 1
项目经理如何管理不同类型员工的扯皮攻略 一.如何管理不得力型员工 ●用宽容之心对待不得力的员工 ●用关爱之心激励不得力的员工 ●用真诚之心感化不得力的员工 ●以公平而严格的竞争和淘汰机制鞭策工作不得力 ...
- 东京迪斯尼海洋乐园攻略_迪士尼乐园-软件工程师的观点
东京迪斯尼海洋乐园攻略 So, we went to Disneyland last week. It was my first time. Personally I was a little i ...
最新文章
- 二手服务器cpu性能,二手服务器cpu当主机
- 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序
- NOIP2018 模拟 9.11
- python trim函数_python strip()函数 介绍
- php 删除文件时间,php删除文件后重建,文件创建时间(filectime)未变化怎么解决??...
- 返岗上班应该注意什么?五个细节必须牢记
- nodejs 从TCP套接字读取并解析数据
- 开源的自然语言处理工具
- windows API 菜鸟学习之路(二)
- python中的for in 语句_2、python,for..in语句
- paip.vs2010 开发ASP浏览时的设置
- 使用EDD枚举域数据
- 轻松搞懂Linux中程序、进程、服务的区别及操作命令
- T32 连接PLC与调试器,使用python可以操纵调试器
- python制作图表放入excel_python- xlsxwriter模块使用(拓展:Excel插入图表)
- 黑马程序员Netty全套教程,全网最全Netty深入浅出教程,Java网络编程的王者
- 第二阶段:数据库设计与初始化
- Lancet子刊:预测婴儿自闭症:进展与挑战
- 应用程序无法正常启动(oxc000007b)
- mongoDb内嵌文档的数据查询
热门文章
- zipException error in opening zip file
- centos7安装netspeeder教程
- 荣耀8桌面添加计算机,华为荣耀手机如何添加快捷开关到快捷功能界面中
- win7 ShuipFCMS 配置 及问题
- SparkSql create table导入本地excel
- Error in Summary.factor ‘min’ not meaningful for factors
- Java源码阅读绘图规范手册--[捷特版]
- php 时间和日期,php 日期和时间
- 最新触摸精灵开发教程(价值300
- 《谷物大脑》书中的精髓:如何通过四星期行动计划打造健康身体?