On Mon, Aug 6, 2012 at 12:29 PM, Phil Thompson <p...@riverbankcomputing.com> wrote: > On Mon, 6 Aug 2012 12:15:44 -0400, Evade Flow <evadef...@gmail.com> wrote: >> I'm trying to write a PyQt4-based mock object for a C++ app exposed over >> D-Bus with the following interface: >> >> Q_CLASSINFO("D-Bus Interface", "com.acme.Audio.Control") >> Q_CLASSINFO("D-Bus Introspection", >> ' <interface name="com.acme.Audio.Control">\n' >> ' <method name="echo">\n' >> ' <arg direction="in" type="s" name="phrase"/>\n' >> ' <arg direction="out" type="s" name="echoed"/>\n' >> ' </method>\n' >> ' <method name="setParams">\n' >> ' <arg direction="out" type="(i)" name="error"/>\n' >> ' <arg direction="in" type="a(iiiii)" >> name="audioSourceParameter"/>\n' >> ' <annotation value="QVector<AudioSourceParameters>" >> name="com.trolltech.QtDBus.QtTypeName.In0"/>\n' >> ' <annotation value="Errors::ErrorCode" >> name="com.trolltech.QtDBus.QtTypeName.Out0"/>\n' >> ' </method>\n' >> ' </interface>\n') >> >> It's unclear to me how how the setParams() function should be decorated. >> For the echo() function, I have: >> >> @pyqtSlot(str, result=str) >> def echo(self, phrase): >> return self.parent().echo(phrase) >> >> But what should I put for setParams()? I was tempted to write: >> >> @pyqtSlot('a(iiiii)', result='(i)') >> def setParams(self, volume): >> return self.parent().echo(phrase) >> >> But this results in: >> >> TypeError: C++ type 'a(iiiii)' is not supported as a pyqtSlot type >> argument type >> >> So... how does one expose a function to D-Bus that accepts an array of >> structs, each containing 5 ints? > > What would be the C++ signature? Try that as a string. > > Phil
The C++ signature is: void setParams(QList<AudioSourceParameters> audioSourceParameters, Errors::ErrorCode &error); where AudioSourceParameters is defined as: struct AudioSourceParameters { int volume; int balance; int fader; int fadein; int fadeout; }; The C++ code sets things up with: Q_DECLARE_METATYPE(QList<AudioSourceParameters>); and: qDBusRegisterMetaType<AudioSourceParameters>(); qDBusRegisterMetaType<QList<AudioSourceParameters> >(); The introspection XML (presumably output by qdbuscpp2xml) shows this as 'a(iiiii)'. That's what the client app (the one I'm trying to provide a mock server for) is expecting to see. Any ideas how to make this work with PyQt? _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt