qdbusxml2cpp 无法正常工作

Posted

技术标签:

【中文标题】qdbusxml2cpp 无法正常工作【英文标题】:qdbusxml2cpp not working properly 【发布时间】:2016-09-04 07:50:24 【问题描述】:

我正在做一个基于 Qt 的小型应用程序,以在我的嵌入式 Linux 附近获取所有 Wifi 承载,为此我正在使用带有 QtDBus 的 Connman。为了获取所有 wifi 信号,我正在尝试使用 qdbusxml2cpp 应用程序获取自动生成的适配器代码。为此,我使用 connman-dbus.conf 文件作为服务描述,并包含以下内容:

   <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
    <policy user="root">
        <allow own="net.connman"/>
        <allow send_destination="net.connman"/>
        <allow send_interface="net.connman.Agent"/>
        <allow send_interface="net.connman.Counter"/>
        <allow send_interface="net.connman.Notification"/>
    <allow send_interface="net.connman.Manager"/>
    </policy>
    <policy at_console="true">
        <allow send_destination="net.connman"/>
    </policy>
    <policy context="default">
        <deny send_destination="net.connman"/>
    </policy>
</busconfig>

然后,我执行下一条命令:

$ qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp

但是这样做的结果是下面的代码:

connmandbusexample.cpp

/*
 * This file was generated by qdbusxml2cpp version 0.8
 * Command line was: qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp
 *
 * qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
 *
 * This is an auto-generated file.
 * Do not edit! All changes made to it will be lost.
 */

#include "connmandbusexample.h"
#include <QtCore/QMetaObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>

connmandbusexample.h

/*
 * This file was generated by qdbusxml2cpp version 0.8
 * Command line was: qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp
 *
 * qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
 *
 * This is an auto-generated file.
 * This file may have been hand-edited. Look for HAND-EDIT comments
 * before re-generating it.
 */

#ifndef CONNMANDBUSEXAMPLE_H_1462807819
#define CONNMANDBUSEXAMPLE_H_1462807819

#include <QtCore/QObject>
#include <QtDBus/QtDBus>
QT_BEGIN_NAMESPACE
class QByteArray;
template<class T> class QList;
template<class Key, class Value> class QMap;
class QString;
class QStringList;
class QVariant;
QT_END_NAMESPACE

#endif

如您所见,这段代码没有用,所以我想知道我是否对 qdbusxml2cpp 做错了什么。另外,我不知道我是否可以通过使用 QtDBus 的其他更正确的方法来做到这一点。最后,是否可以从不使用 root 权限的 Qt App 连接到 wifi 网络?我认为以上所有问题都是非常相关的问题,可以帮助解决这个主题。

【问题讨论】:

【参考方案1】:

您要转换的文件是 DBus 守护程序的配置文件,而不是 DBus 接口的接口规范。它仅描述了允许在总线上从/向 conman 发送哪些信号,而不是它们的外观。

您需要转换正确的接口 xml,它应该类似于 this。建议使用您正在使用的 conman 的确切版本的接口规范,我只是从 github 中提取了最新的主干版本作为示例。

更多DBus接口描述可以在xml(自省格式)here中找到。

我不熟悉 conman 的功能,也不熟悉它的哪一部分功能可以通过 D-Bus 访问,但在快速浏览 these notes 之后,您似乎应该能够通过以下方式扫描可用接口该界面 - 尝试使用 net.connman.Technology.Scan 方法。

通常使用 QDbus 并没有什么问题,文档甚至指出:

应该注意的是,低级实现并不是主要为应用程序作者设计的。相反,它是绑定作者的基础和重新实现的参考。如果您能够这样做,建议您使用更高级别的绑定或实现之一。

QtDBus 是those higher level bindings 之一。

【讨论】:

以上是关于qdbusxml2cpp 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

继续无法正常工作

AVPlayer 无法正常工作 - Swift

为啥隐藏和显示密码功能无法正常工作?

xmppframework 的 didReceive 存在无法正常工作

如何使用 qdbusxml2cpp 生成同步接口类?

Qt QToolBar 无法正常工作