使用array-of-strings参数调用QtDBus方法

时间:2017-07-13 09:39:05

标签: qt dbus

我尝试用参数调用方法 例如,列出服务。

此代码

#include <QtDBus>
#include <QDebug>

QDBusMessage callDbusMethod(QString method, QList<QVariant> args= {}) {
    QDBusMessage msg;
    if(QDBusConnection::systemBus().isConnected()) {
        QDBusInterface iface("org.freedesktop.systemd1", "/org/freedesktop/systemd1",
            "org.freedesktop.systemd1.Manager", QDBusConnection::systemBus());
        if(iface.isValid())
            msg= args.isEmpty() ? iface.call(QDBus::AutoDetect, method.toLatin1())
                : iface.callWithArgumentList(QDBus::AutoDetect, method.toLatin1(), args);
        if(msg.type() == QDBusMessage::ErrorMessage)
            qDebug() << msg.errorMessage(); }
    return msg;
}

typedef struct {
    QString path, state; } UnitFile;

int main() {
    QDBusMessage msg= callDbusMethod("ListUnitFilesByPatterns",
        QList<QVariant>{ QVariant(""), QVariant("*.service") });
    //QDBusMessage msg= callDbusMethod("ListUnitFiles");
    if(msg.arguments().size()) {
        const QDBusArgument argUnitFiles= msg.arguments().at(0).value<QDBusArgument>();
        argUnitFiles.beginArray();
        while(!argUnitFiles.atEnd()) {
            UnitFile unit;
            argUnitFiles.beginStructure();
            argUnitFiles >> unit.path >> unit.state;
            argUnitFiles.endStructure();
            qDebug() << unit.path; }
        argUnitFiles.endArray(); }
}

返回

&#34;无效的参数&#39; ss&#39;调用org.freedesktop.systemd1.Manager.ListUnitFilesByPatterns(),期待&#39; asas&#39;。&#34;

如何正确调用该方法。

0 个答案:

没有答案