qdbusxml2cpp не работает должным образом

Я делаю небольшое приложение, основанное на Qt, чтобы получить все носители Wifi возле моего встроенного Linux, и для этого я использую Connman с QtDBus. Чтобы получить все сигналы Wi-Fi, я пытаюсь получить автоматически сгенерированный код адаптера с помощью 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. Наконец, возможно ли подключиться к сети Wi-Fi из приложения Qt, которое не работает с разрешениями root? Я думаю, что все вышеперечисленное — очень связанные вопросы, которые могут помочь в этой теме.

1

Решение

Конвертируемый файл является файлом конфигурации для демона DBus, но не спецификацией интерфейса для интерфейса DBus. Он только описывает, какие сигналы разрешено отправлять по шине от / к conman, но не как они выглядят.

Нужно конвертировать правильный интерфейс xml, он должен выглядеть примерно так этот. Рекомендуется использовать спецификацию интерфейса для конкретной версии conman, которую вы используете, я просто взял в качестве примера последнюю версию транка из github.

Вы можете найти больше информации об описании интерфейса DBus в формате xml (формат самоанализа) Вот.

Я не знаком с функциональностью conman или с тем, какая часть его функций доступна через D-Bus, но после быстрого взгляда на эти заметки похоже, что вы должны иметь возможность сканировать доступные интерфейсы через этот интерфейс — попробуйте использовать метод net.connman.Technology.Scan.

Обычно в использовании QDbus нет ничего плохого, в документации даже говорится:

Следует отметить, что низкоуровневая реализация в первую очередь не предназначена для использования авторами приложений. Скорее, это основа для обязательных авторов и ссылка для повторной реализации. Если вы можете сделать это, рекомендуется использовать одну из привязок или реализаций более высокого уровня.

QtDBus является одним из эти привязки более высокого уровня.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]