diff options
Diffstat (limited to 'src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp')
-rw-r--r-- | src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp | 196 |
1 files changed, 150 insertions, 46 deletions
diff --git a/src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp index b64ea5cf21..7eb1e8b34e 100644 --- a/src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp +++ b/src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp @@ -48,99 +48,205 @@ ** ****************************************************************************/ -//! [0] +#include <QString> +#include <QDBusArgument> +#include <QDBusMetaType> +#include <QDBusMessage> +#include <QDBusContext> + +typedef QDBusVariant MyElement; +typedef QList<MyElement> MyArray; +typedef QHash<int, MyElement> MyDictionary; +typedef QDBusVariant MyType; +typedef QDBusVariant MyValue; +typedef QDBusVariant Type; +QDBusArgument argument; + +class MyObject: public QObject +{ + Q_OBJECT + + Q_CLASSINFO("D-Bus Interface", "org.qtproject.QtDBus.MyObject") + Q_CLASSINFO("D-Bus Introspection", "" +" <interface name=\"org.qtproject.QtDBus.MyObject\" >\n" +" <property access=\"readwrite\" type=\"i\" name=\"prop1\" />\n" +" <property name=\"complexProp\" type=\"ai\" access=\"readwrite\">\n" +" <annotation name=\"org.qtproject.QtDBus.QtTypeName\" value=\"QList<int>\"/>\n" +" </property>\n" +" <signal name=\"somethingHappened\" >\n" +" <arg direction=\"out\" type=\"s\" />\n" +" </signal>\n" +" <method name=\"ping\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"ping\" />\n" +" </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"ping_invokable\" />\n" +" </method>\n" +" <method name=\"ping\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping1\" />\n" +" <arg direction=\"in\" type=\"v\" name=\"ping2\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong1\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong2\" />\n" +" </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping1_invokable\" />\n" +" <arg direction=\"in\" type=\"v\" name=\"ping2_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong1_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong2_invokable\" />\n" +" </method>\n" +" <method name=\"ping\" >\n" +" <arg direction=\"in\" type=\"ai\" name=\"ping\" />\n" +" <arg direction=\"out\" type=\"ai\" name=\"ping\" />\n" +" <annotation name=\"org.qtproject.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n" +" <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n" +" </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"ai\" name=\"ping_invokable\" />\n" +" <arg direction=\"out\" type=\"ai\" name=\"ping_invokable\" />\n" +" <annotation name=\"org.qtproject.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n" +" <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n" +" </method>\n" +" </interface>\n" + "") + Q_PROPERTY(int prop1 READ prop1 WRITE setProp1) + Q_PROPERTY(QList<int> complexProp READ complexProp WRITE setComplexProp) + +public: + static int callCount; + static QVariantList callArgs; + MyObject() + { + QObject *subObject = new QObject(this); + subObject->setObjectName("subObject"); + } +}; + +struct MyMember +{ + int subMember1; + int subMember2; +}; + +//! [0-0] struct MyStructure { int count; QString name; +//! [0-0] + MyMember member1; + MyMember member2; + MyMember member3; + MyMember member4; +//! [0-1] + // ... }; Q_DECLARE_METATYPE(MyStructure) // Marshall the MyStructure data into a D-Bus argument -QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &mystruct) +QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct) { argument.beginStructure(); - argument << mystruct.count << mystruct.name; + argument << myStruct.count << myStruct.name; argument.endStructure(); return argument; } // Retrieve the MyStructure data from the D-Bus argument -const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &mystruct) +const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &myStruct) { argument.beginStructure(); - argument >> mystruct.count >> mystruct.name; + argument >> myStruct.count >> myStruct.name; argument.endStructure(); return argument; } -//! [0] +//! [0-1] +const QDBusArgument &operator<<(const QDBusArgument &argument, const MyMember &/*member*/) +{ + return argument; +} +const QDBusArgument &operator>>(const QDBusArgument &argument, const MyMember &/*member*/) +{ + return argument; +} + +void registerMyStructure() +{ //! [1] qDBusRegisterMetaType<MyStructure>(); //! [1] +} - +void castType() +{ +QVariant argument = MyObject::callArgs.at(0); +QDBusVariant dv = qdbus_cast<QDBusVariant>(argument); //! [2] MyType item = qdbus_cast<Type>(argument); //! [2] +} - +void argumentItem() +{ //! [3] MyType item; argument >> item; //! [3] - - +} +namespace QDBusSnippets +{ //! [4] -QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &mystruct) +QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct) { argument.beginStructure(); - argument << mystruct.member1 << mystruct.member2 << ... ; + argument << myStruct.member1 << myStruct.member2; argument.endStructure(); return argument; } //! [4] - +namespace Alt { //! [5] -QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &mystruct) +QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct) { argument.beginStructure(); - argument << mystruct.member1 << mystruct.member2; + argument << myStruct.member1 << myStruct.member2; argument.beginStructure(); - argument << mystruct.member3.subMember1 << mystruct.member3.subMember2; + argument << myStruct.member3.subMember1 << myStruct.member3.subMember2; argument.endStructure(); - argument << mystruct.member4; + argument << myStruct.member4; argument.endStructure(); return argument; } //! [5] - +} // namespace //! [6] -// append an array of MyElement types -QDBusArgument &operator<<(QDBusArgument &argument, const MyArray &myarray) +// Append an array of MyElement types +QDBusArgument &operator<<(QDBusArgument &argument, const MyArray &myArray) { - argument.beginArray( qMetaTypeId<MyElement>() ); - for ( int i = 0; i < myarray.length; ++i ) - argument << myarray.elements[i]; + argument.beginArray(qMetaTypeId<MyElement>()); + for (const auto &element : myArray) + argument << element; argument.endArray(); return argument; } //! [6] - //! [7] -// append a dictionary that associates ints to MyValue types -QDBusArgument &operator<<(QDBusArgument &argument, const MyDictionary &mydict) +// Append a dictionary that associates ints to MyValue types +QDBusArgument &operator<<(QDBusArgument &argument, const MyDictionary &myDict) { - argument.beginMap( QVariant::Int, qMetaTypeId<MyValue>() ); - for ( int i = 0; i < mydict.length; ++i ) { + argument.beginMap(QVariant::Int, qMetaTypeId<MyValue>()); + MyDictionary::const_iterator i; + for (i = myDict.cbegin(); i != myDict.cend(); ++i) { argument.beginMapEntry(); - argument << mydict.data[i].key << mydict.data[i].value; + argument << i.key() << i.value(); argument.endMapEntry(); } argument.endMap(); @@ -148,29 +254,27 @@ QDBusArgument &operator<<(QDBusArgument &argument, const MyDictionary &mydict) } //! [7] - //! [8] -const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &mystruct) +const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &myStruct) { - argument.beginStructure() - argument >> mystruct.member1 >> mystruct.member2 >> mystruct.member3 >> ...; + argument.beginStructure(); + argument >> myStruct.member1 >> myStruct.member2 >> myStruct.member3; argument.endStructure(); return argument; } //! [8] - //! [9] -// extract a MyArray array of MyElement elements -const QDBusArgument &operator>>(const QDBusArgument &argument, MyArray &myarray) +// Extract a MyArray array of MyElement elements +const QDBusArgument &operator>>(const QDBusArgument &argument, MyArray &myArray) { argument.beginArray(); - myarray.clear(); + myArray.clear(); - while ( !argument.atEnd() ) { + while (!argument.atEnd()) { MyElement element; argument >> element; - myarray.append( element ); + myArray.append(element); } argument.endArray(); @@ -178,24 +282,24 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, MyArray &myarray) } //! [9] - //! [10] -// extract a MyDictionary map that associates ints to MyValue elements -const QDBusArgument &operator>>(const QDBusArgument &argument, MyDictionary &mydict) +// Extract a MyDictionary map that associates integers to MyElement items +const QDBusArgument &operator>>(const QDBusArgument &argument, MyDictionary &myDict) { argument.beginMap(); - mydict.clear(); + myDict.clear(); - while ( !argument.atEnd() ) { + while (!argument.atEnd()) { int key; - MyValue value; + MyElement value; argument.beginMapEntry(); argument >> key >> value; argument.endMapEntry(); - mydict.append( key, value ); + myDict.insert(key, value); } argument.endMap(); return argument; } //! [10] +} |