8#include <QtDBus/qtdbusglobal.h>
9#include <QtCore/qbytearray.h>
10#include <QtCore/qhash.h>
11#include <QtCore/qglobal.h>
12#include <QtCore/qlist.h>
13#include <QtCore/qmap.h>
14#include <QtCore/qstring.h>
15#include <QtCore/qstringlist.h>
16#include <QtCore/qvariant.h>
17#include <QtDBus/qdbusextratypes.h>
26class QDBusUnixFileDescriptor;
45 QDBusArgument(
const QDBusArgument &other);
46 QDBusArgument(QDBusArgument &&other)
noexcept : d(other.d) { other.d =
nullptr; }
47 QDBusArgument &operator=(QDBusArgument &&other)
noexcept { swap(other);
return *
this; }
48 QDBusArgument &operator=(
const QDBusArgument &other);
51 void swap(QDBusArgument &other)
noexcept { qt_ptr_swap(d, other.d); }
54 QDBusArgument &operator<<(uchar arg);
55 QDBusArgument &operator<<(
bool arg);
56 QDBusArgument &operator<<(
short arg);
57 QDBusArgument &operator<<(ushort arg);
58 QDBusArgument &operator<<(
int arg);
59 QDBusArgument &operator<<(uint arg);
60 QDBusArgument &operator<<(qlonglong arg);
61 QDBusArgument &operator<<(qulonglong arg);
62 QDBusArgument &operator<<(
double arg);
63 QDBusArgument &operator<<(
const QString &arg);
64 QDBusArgument &operator<<(
const QDBusVariant &arg);
65 QDBusArgument &operator<<(
const QDBusObjectPath &arg);
66 QDBusArgument &operator<<(
const QDBusSignature &arg);
67 QDBusArgument &operator<<(
const QDBusUnixFileDescriptor &arg);
68 QDBusArgument &operator<<(
const QStringList &arg);
69 QDBusArgument &operator<<(
const QByteArray &arg);
71 void beginStructure();
73 void beginArray(
int elementMetaTypeId)
74 { beginArray(QMetaType(elementMetaTypeId)); }
75 void beginArray(QMetaType elementMetaType);
77 void beginMap(
int keyMetaTypeId,
int valueMetaTypeId)
78 { beginMap(QMetaType(keyMetaTypeId), QMetaType(valueMetaTypeId)); }
79 void beginMap(QMetaType keyMetaType, QMetaType valueMetaType);
84 void appendVariant(
const QVariant &v);
87 QString currentSignature()
const;
88 ElementType currentType()
const;
90 const QDBusArgument &operator>>(uchar &arg)
const;
91 const QDBusArgument &operator>>(
bool &arg)
const;
92 const QDBusArgument &operator>>(
short &arg)
const;
93 const QDBusArgument &operator>>(ushort &arg)
const;
94 const QDBusArgument &operator>>(
int &arg)
const;
95 const QDBusArgument &operator>>(uint &arg)
const;
96 const QDBusArgument &operator>>(qlonglong &arg)
const;
97 const QDBusArgument &operator>>(qulonglong &arg)
const;
98 const QDBusArgument &operator>>(
double &arg)
const;
99 const QDBusArgument &operator>>(QString &arg)
const;
100 const QDBusArgument &operator>>(QDBusVariant &arg)
const;
101 const QDBusArgument &operator>>(QDBusObjectPath &arg)
const;
102 const QDBusArgument &operator>>(QDBusSignature &arg)
const;
103 const QDBusArgument &operator>>(QDBusUnixFileDescriptor &arg)
const;
104 const QDBusArgument &operator>>(QStringList &arg)
const;
105 const QDBusArgument &operator>>(QByteArray &arg)
const;
107 void beginStructure()
const;
108 void endStructure()
const;
109 void beginArray()
const;
110 void endArray()
const;
111 void beginMap()
const;
113 void beginMapEntry()
const;
114 void endMapEntry()
const;
117 QVariant asVariant()
const;
120 QDBusArgument(QDBusArgumentPrivate *d);
121 friend class QDBusArgumentPrivate;
122 mutable QDBusArgumentPrivate *d;
125 template <
typename... T>
126 friend QDBusArgument &operator<<(QDBusArgument &argument,
const std::tuple<T...> &tuple)
128 static_assert(
sizeof...(T) != 0,
"D-Bus doesn't allow empty structs");
129 argument.beginStructure();
130 std::apply([&argument](
const auto &...elements) { (argument << ... << elements); }, tuple);
131 argument.endStructure();
135 template <
typename... T>
136 friend const QDBusArgument &operator>>(
const QDBusArgument &argument, std::tuple<T...> &tuple)
138 static_assert(
sizeof...(T) != 0,
"D-Bus doesn't allow empty structs");
139 argument.beginStructure();
140 std::apply([&argument](
auto &...elements) { (argument >> ... >> elements); }, tuple);
141 argument.endStructure();
148QT_DECL_METATYPE_EXTERN(QDBusArgument, Q_DBUS_EXPORT)
151template<
typename T>
inline T qdbus_cast(
const QDBusArgument &arg)
160 if (v.metaType() == QMetaType::fromType<QDBusArgument>())
163 return qvariant_cast<T>(v);
167template<>
inline QVariant qdbus_cast<QVariant>(
const QDBusArgument &arg)
171 return item.variant();
173template<>
inline QVariant qdbus_cast<QVariant>(
const QVariant &v)
175 return qdbus_cast<QDBusVariant>(v).variant();
178Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QVariant &v);
181#ifndef QDBUS_NO_SPECIALTYPES
183Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QDate &date);
184Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QDate &date);
186Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QTime &time);
187Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QTime &time);
189Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QDateTime &dt);
190Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QDateTime &dt);
192Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QRect &rect);
193Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QRect &rect);
195Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QRectF &rect);
196Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QRectF &rect);
198Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QSize &size);
199Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QSize &size);
201Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QSizeF &size);
202Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QSizeF &size);
204Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QPoint &pt);
205Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QPoint &pt);
207Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QPointF &pt);
208Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QPointF &pt);
210Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QLine &line);
211Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QLine &line);
213Q_DBUS_EXPORT
const QDBusArgument &operator>>(
const QDBusArgument &a, QLineF &line);
214Q_DBUS_EXPORT
QDBusArgument &operator<<(QDBusArgument &a,
const QLineF &line);
217template<
template <
typename>
class Container,
typename T,
218 typename =
typename Container<T>::iterator>
221 arg.beginArray(QMetaType::fromType<T>());
222 typename Container<T>::const_iterator it = list.begin();
223 typename Container<T>::const_iterator end = list.end();
224 for ( ; it != end; ++it)
230template<
template <
typename>
class Container,
typename T,
231 typename =
typename Container<T>::iterator>
236 while (!arg.atEnd()) {
239 list.push_back(item);
248 arg.beginArray(QMetaType::fromType<QDBusVariant>());
249 for (
const QVariant &value : list)
250 arg << QDBusVariant(value);
256template <
template <
typename,
typename>
class Container,
typename Key,
typename T,
257 QtPrivate::IfAssociativeIteratorHasKeyAndValue<
typename Container<Key, T>::iterator> =
true>
260 arg.beginMap(QMetaType::fromType<Key>(), QMetaType::fromType<T>());
261 auto it = map.begin();
262 auto end = map.end();
263 for ( ; it != end; ++it) {
265 arg << it.key() << it.value();
272template <
template <
typename,
typename>
class Container,
typename Key,
typename T,
273 QtPrivate::IfAssociativeIteratorHasFirstAndSecond<
typename Container<Key, T>::iterator> =
true>
276 arg.beginMap(QMetaType::fromType<Key>(), QMetaType::fromType<T>());
277 auto it = map.begin();
278 auto end = map.end();
279 for ( ; it != end; ++it) {
281 arg << it->first << it->second;
288template <
template <
typename,
typename>
class Container,
typename Key,
typename T,
289 QtPrivate::IfAssociativeIteratorHasKeyAndValue<
typename Container<Key, T>::iterator> =
true>
294 while (!arg.atEnd()) {
299 map.insert(key, value);
308 arg.beginMap(QMetaType::fromType<QString>(), QMetaType::fromType<QDBusVariant>());
309 for (
const auto &[key, value] : map.asKeyValueRange()) {
311 arg << key << QDBusVariant(value);
320 arg.beginMap(QMetaType::fromType<QString>(), QMetaType::fromType<QDBusVariant>());
321 for (
const auto &[key, value] : map.asKeyValueRange()) {
323 arg << key << QDBusVariant(value);
330template <
typename T1,
typename T2>
333 arg.beginStructure();
334 arg << pair.first << pair.second;
339template <
typename T1,
typename T2>
342 arg.beginStructure();
343 arg >> pair.first >> pair.second;
static void saveIntrospectionXml(QDBusAbstractAdaptor *adaptor, const QString &xml)
static QString retrieveIntrospectionXml(QDBusAbstractAdaptor *adaptor)
void relay(QObject *sender, int id, void **)
void addAdaptor(QDBusAbstractAdaptor *adaptor)
void disconnectAllSignals(QObject *object)
QList< AdaptorData > AdaptorMap
QDBusAdaptorConnector(QObject *parent)
void connectAllSignals(QObject *object)
QDBusArgument::ElementType currentType()
The QDBusServiceWatcher class allows the user to watch for a bus service change.
CallMode
This enum describes the various ways of placing a function call.
QDBusAdaptorConnector * qDBusFindAdaptorConnector(QDBusAbstractAdaptor *adaptor)
QDBusAdaptorConnector * qDBusCreateAdaptorConnector(QObject *obj)
QDBusAdaptorConnector * qDBusFindAdaptorConnector(QObject *obj)
QDBusAdaptorConnector * qDBusCreateAdaptorConnector(QObject *object)
#define QCLASSINFO_DBUS_INTERFACE
QDBusAdaptorConnector * qDBusFindAdaptorConnector(QObject *object)
const QDBusArgument & operator>>(const QDBusArgument &arg, Container< Key, T > &map)
T qdbus_cast(const QVariant &v)
QDBusArgument & operator<<(QDBusArgument &arg, const Container< Key, T > &map)
QDBusArgument & operator<<(QDBusArgument &arg, const Container< T > &list)
QDBusArgument & operator<<(QDBusArgument &arg, const std::pair< T1, T2 > &pair)
const QDBusArgument & operator>>(const QDBusArgument &arg, Container< T > &list)
const QDBusArgument & operator>>(const QDBusArgument &arg, std::pair< T1, T2 > &pair)
bool qDBusInterfaceInObject(QObject *obj, const QString &interface_name)
Q_DBUS_EXPORT int qDBusParametersForMethod(const QList< QByteArray > ¶meters, QList< QMetaType > &metaTypes, QString &errorMsg)
QString qDBusIntrospectObject(const QDBusConnectionPrivate::ObjectTreeNode &node, const QString &path)
QString qDBusInterfaceFromMetaObject(const QMetaObject *mo)
Q_DBUS_EXPORT bool qDBusCheckAsyncTag(const char *tag)
QDBusMessage qDBusPropertyGetAll(const QDBusConnectionPrivate::ObjectTreeNode &node, const QDBusMessage &msg)
QDBusMessage qDBusPropertyGet(const QDBusConnectionPrivate::ObjectTreeNode &node, const QDBusMessage &msg)
int qDBusParametersForMethod(const QMetaMethod &mm, QList< QMetaType > &metaTypes, QString &errorMsg)
QDBusMessage qDBusPropertySet(const QDBusConnectionPrivate::ObjectTreeNode &node, const QDBusMessage &msg)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]