I have recently been doing some work with Qt and DBus and I got stuck a little on how to correctly send a {sv} over DBus. Either my google-fu is terrible or there are not many examples on how to do this, therefore here is a small static method that will return a {sv} that can be send via DBus without getting a wrong parameters error:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #ifndef DBUS_HELPER_H #define DBUS_HELPER_H #include #include #include #include typedef QHash DBusStringHash; class DBusHelper : public QObject { Q_OBJECT public: static int DBUS_STRING_MAP_ID; explicit DBusHelper(QObject *parent = 0); static class _init { public: _init() { // diff actions to init qRegisterMetaType("DBusStringHash"); qDBusRegisterMetaType(); DBUS_STRING_MAP_ID = QMetaType::type("DBusStringHash"); } } _initializer; static QVariant getVariant(DBusStringHash hash); }; Q_DECLARE_METATYPE(DBusStringHash) #endif // DBUS_HELPER_H |
1 2 3 4 5 6 7 8 9 10 11 12 13 | // required for the init int DBusHelper::DBUS_STRING_MAP_ID = 0; DBusHelper::_init DBusHelper::_initializer; DBusHelper::DBusHelper(QObject *parent) : QObject(parent) { } QVariant DBusHelper::getVariant(DBusStringHash hash) { return QVariant(DBUS_STRING_MAP_ID, &hash); } |
I added the init trick so that there is no need to manually register the types. I hope it helps!
Read more
Latest Official Posts