qdbusxml2cpp无法正常工作

时间:2016-05-09 15:36:32

标签: c++ qt embedded-linux qtdbus

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

   <!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。最后,是否可以从Qt App连接到无法使用root权限的wifi网络?我认为以上所有都是非常相关的问题,可以帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

你需要转换正确的接口xml,它应该看起来像this。建议将接口规范用于您正在使用的精确版本的conman,我只是从github中提取最新的trunk版本作为示例。

您可以在xml(内省格式)here中找到有关DBus接口描述的更多信息。

我不熟悉conman的功能,或者通过D-Bus可以访问其功能的哪一部分,但是在快速浏览these notes后,您应该能够扫描可用的通过该接口接口 - 尝试使用net.connman.Technology.Scan方法。

通常使用QDbus没有任何问题,文档甚至声明:

  

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

QtDBus是those higher level bindings之一。