Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. I need help with QDBusArgument unmashalling
Forum Updated to NodeBB v4.3 + New Features

I need help with QDBusArgument unmashalling

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 1 Posters 293 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Offline
    W Offline
    wincc
    wrote on last edited by
    #1

    I am trying to unmarshall the QDBusMessage message into data now i am stuck at how to get the "internal" struct data, I can not find any example whatsoever online,

    with the Mount struct below I get the first 10 but how do I get the next? I am out of things to try.

    Output from dbus-monitor type=signal interface="org.gtk.vfs.MountTracker"

    signal time=1653669688.246585 sender=:1.7 -> destination=(null destination) serial=1483 path=/org/gtk/vfs/mounttracker; interface=org.gtk.vfs.MountTracker; member=Mounted
    struct {
    string ":1.514"
    object path "/org/gtk/vfs/mount/1"
    string "root on 172.16.1.2"
    string "sftp:host=172.16.1.2,user=root"
    string ""
    string ". GThemedIcon folder-remote folder folder-remote-symbolic folder-symbolic"
    string ". GThemedIcon folder-remote-symbolic folder-symbolic folder-remote folder"
    string ""
    boolean true
    array of bytes "/run/user/1000/gvfs/sftp:host=172.16.1.2,user=root" + \0
    struct {
    array of bytes "/" + \0
    array [
    dict entry(
    string "host"
    variant array of bytes "172.16.1.2" + \0
    )
    dict entry(
    string "type"
    variant array of bytes "sftp" + \0
    )
    dict entry(
    string "user"
    variant array of bytes "root" + \0
    )
    ]
    }
    array of bytes "/root" + \0
    }

    //===============================================================
    header file

    // <arg type="(sossssssbay(aya{sv})ay)" name="mount"/>
    struct Mount
    {

    QString member1;
    QDBusObjectPath member2;
    QString member3;
    QString member4;
    QString member5;
    QString member6;
    QString member7;
    QString member8;
    bool member9;
    QByteArray member10;
    

    };

    //===============================================================
    source file

    Q_DECLARE_METATYPE(Mount)

    qRegisterMetaType<Mount>("Mount");
    qDBusRegisterMetaType<Mount>();

    QDBusConnection::sessionBus().connect("org.gtk.vfs.Daemon", "/org/gtk/vfs/mounttracker", "org.gtk.vfs.MountTracker", "Mounted", this, SLOT(Mounted(QDBusMessage)));

    // Marshall the MyStructure data into a D-Bus argument
    QDBusArgument &operator<<(QDBusArgument &argument, const Mount &mystruct)
    {

    argument.beginStructure();
    argument << mystruct.member1;
    argument << mystruct.member2;
    argument << mystruct.member3;
    argument << mystruct.member4;
    argument << mystruct.member5;
    argument << mystruct.member6;
    argument << mystruct.member7;
    argument << mystruct.member8;
    argument << mystruct.member9;
    argument << mystruct.member10;
    argument.endStructure();
    return argument;
    

    }

    // Retrieve the MyStructure data from the D-Bus argument
    const QDBusArgument &operator>>(const QDBusArgument &argument, Mount &mystruct )
    {

    argument.beginStructure();
    argument >> mystruct.member1;
    argument >> mystruct.member2;
    argument >> mystruct.member3;
    argument >> mystruct.member4;
    argument >> mystruct.member5;
    argument >> mystruct.member6;
    argument >> mystruct.member7;
    argument >> mystruct.member8;
    argument >> mystruct.member9;
    argument >> mystruct.member10;
    argument.endStructure();
    
    return argument;
    

    }

    void mydbusConnections::Mounted(QDBusMessage message)
    {

    Mount structure;
    message.arguments().at(0).value<QDBusArgument>() >> structure;
    

    }

    1 Reply Last reply
    0
    • W Offline
      W Offline
      wincc
      wrote on last edited by
      #2

      Ok, problem solved...

      header file

      // <arg type="(sossssssbay(aya{sv})ay)" name="mount"/>
      struct Mount
      {
      QString member1;
      QDBusObjectPath member2;
      QString member3;
      QString member4;
      QString member5;
      QString member6;
      QString member7;
      QString member8;
      bool member9;
      QByteArray member10;
      struct MountSub
      {
      QByteArray submember0;
      QMap <QString,QVariant> submember1;
      } member11;
      QByteArray member12;
      };

      Q_DECLARE_METATYPE(Mount)
      Q_DECLARE_METATYPE(Mount::MountSub)

      source file

      qRegisterMetaType<Mount>("Mount");
      qDBusRegisterMetaType<Mount>();
      
      qRegisterMetaType<Mount::MountSub>("MountSub");
      qDBusRegisterMetaType<Mount::MountSub>();
      

      // Marshall the MyStructure data into a D-Bus argument
      QDBusArgument &operator<<(QDBusArgument &argument, const Mount &mystruct)
      {
      argument.beginStructure();
      argument << mystruct.member1;
      argument << mystruct.member2;
      argument << mystruct.member3;
      argument << mystruct.member4;
      argument << mystruct.member5;
      argument << mystruct.member6;
      argument << mystruct.member7;
      argument << mystruct.member8;
      argument << mystruct.member9;
      argument << mystruct.member10;
      argument.beginStructure();
      argument << mystruct.member11.submember0;
      argument << mystruct.member11.submember1;
      argument.endStructure();
      argument << mystruct.member12;
      argument.endStructure();
      return argument;
      }

      // Retrieve the MyStructure data from the D-Bus argument
      const QDBusArgument &operator>>(const QDBusArgument &argument, Mount &mystruct )
      {

      argument.beginStructure();
      argument >> mystruct.member1;
      argument >> mystruct.member2;
      argument >> mystruct.member3;
      argument >> mystruct.member4;
      argument >> mystruct.member5;
      argument >> mystruct.member6;
      argument >> mystruct.member7;
      argument >> mystruct.member8;
      argument >> mystruct.member9;
      argument >> mystruct.member10;
      argument.beginStructure();
      argument >> mystruct.member11.submember0;
      argument >> mystruct.member11.submember1;
      argument.endStructure();
      argument >> mystruct.member12;
      argument.endStructure();
      
      return argument;
      

      }

      // Marshall the MyStructure data into a D-Bus argument
      QDBusArgument &operator<<(QDBusArgument &argument, const Mount::MountSub &mystruct)
      {
      argument.beginStructure();
      argument << mystruct.submember0;
      argument << mystruct.submember1;
      argument.endStructure();
      return argument;
      }

      // Retrieve the MyStructure data from the D-Bus argument
      const QDBusArgument &operator>>(const QDBusArgument &argument, Mount::MountSub &mystruct )
      {
      argument.beginStructure();
      argument >> mystruct.submember0;
      argument >> mystruct.submember1;
      argument.endStructure();
      return argument;
      }

      void mydbusConnections::Mounted(QDBusMessage message)
      {
      // <arg type="(sossssssbay(aya{sv})ay)" name="mount"/>
      Mount structure;
      message.arguments().at(0).value<QDBusArgument>() >> structure;

      qInfo() << structure.member1;
      qInfo() << structure.member2.path();
      qInfo() << structure.member3;
      qInfo() << structure.member4;
      qInfo() << structure.member5;
      qInfo() << structure.member6;
      qInfo() << structure.member7;
      qInfo() << structure.member8;
      qInfo() << structure.member9;
      qInfo() << structure.member10;
      
      qInfo() << structure.member11.submember0;
      qInfo() << structure.member11.submember1;
      
      qInfo() << structure.member12;
      

      }

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved