ModemManagerQt

modemdevice.cpp
1/*
2 SPDX-FileCopyrightText: 2013, 2014 Lukas Tinkl <ltinkl@redhat.com>
3 SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7
8#include "modemdevice.h"
9#include "modemdevice_p.h"
10
11#ifdef MMQT_STATIC
12#include "dbus/fakedbus.h"
13#else
14#include "dbus/dbus.h"
15#endif
16#include "manager.h"
17#include "mmdebug_p.h"
18#include "modem3gpp.h"
19#include "modem3gppussd.h"
20#include "modemcdma.h"
21#include "modemlocation.h"
22#if MM_CHECK_VERSION(1, 2, 0)
23#include "modemoma.h"
24#include "modemsignal.h"
25#endif
26#if MM_CHECK_VERSION(1, 6, 0)
27#include "modemvoice.h"
28#endif
29#include "modemfirmware.h"
30#include "modemsimple.h"
31#include "modemtime.h"
32
33#include <QDBusConnection>
34#include <QDomDocument>
35
36ModemManager::ModemDevicePrivate::ModemDevicePrivate(const QString &path, ModemManager::ModemDevice *q)
37 : uni(path)
38 , q_ptr(q)
39{
40 init();
41}
42
43ModemManager::ModemDevicePrivate::~ModemDevicePrivate()
44{
45}
46
47void ModemManager::ModemDevicePrivate::init()
48{
49 Q_Q(ModemManager::ModemDevice);
50#ifdef MMQT_STATIC
51 bool success = QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
52 QLatin1String(MMQT_DBUS_PATH),
53 QLatin1String(DBUS_INTERFACE_MANAGER),
54 QStringLiteral("InterfacesAdded"),
55 this,
56 SLOT(onInterfacesAdded(QDBusObjectPath, ModemManager::MMVariantMapMap)));
57 success = QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
58 QLatin1String(MMQT_DBUS_PATH),
59 QLatin1String(DBUS_INTERFACE_MANAGER),
60 QStringLiteral("InterfacesRemoved"),
61 this,
62 SLOT(onInterfacesRemoved(QDBusObjectPath, QStringList)));
63#else
64 bool success = QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
65 QLatin1String(MMQT_DBUS_PATH),
66 QLatin1String(DBUS_INTERFACE_MANAGER),
67 QStringLiteral("InterfacesAdded"),
68 this,
69 SLOT(onInterfacesAdded(QDBusObjectPath, ModemManager::MMVariantMapMap)));
70 success = QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
71 QLatin1String(MMQT_DBUS_PATH),
72 QLatin1String(DBUS_INTERFACE_MANAGER),
73 QStringLiteral("InterfacesRemoved"),
74 this,
75 SLOT(onInterfacesRemoved(QDBusObjectPath, QStringList)));
76#endif
77
78 initInterfaces();
79}
80
81void ModemManager::ModemDevicePrivate::initInterfaces()
82{
83 interfaceList.clear();
84
85 const QString xmlData = introspect();
86 if (xmlData.isEmpty()) {
87 qCDebug(MMQT) << uni << "has no interfaces!";
88 return;
89 }
90
91 QDomDocument dom;
92 dom.setContent(xmlData);
93
94 QDomNodeList ifaceNodeList = dom.elementsByTagName(QStringLiteral("interface"));
95 for (int i = 0; i < ifaceNodeList.count(); i++) {
96 QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
97 /* Accept only MM interfaces so that when the device is unplugged,
98 * interfaceList goes empty and we can easily verify that the device is gone. */
99 if (!ifaceElem.isNull() && ifaceElem.attribute(QStringLiteral("name")).startsWith(QLatin1String(MMQT_DBUS_SERVICE))) {
100 const QString name = ifaceElem.attribute(QStringLiteral("name"));
101 if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) {
102 interfaceList.insert(ModemManager::ModemDevice::ModemInterface, ModemManager::Modem::Ptr());
103 if (interfaceList.contains(ModemManager::ModemDevice::ModemInterface)) {
104 ModemManager::Modem::Ptr modemInterface = interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>();
105 if (!modemInterface->simPath().isEmpty()) {
106 simCard = ModemManager::Sim::Ptr(new ModemManager::Sim(modemInterface->simPath()), &QObject::deleteLater);
107 // q->simAdded(modemInterface->simPath());
108
109 QObject::connect(modemInterface.data(), SIGNAL(simPathChanged(QString, QString)), this, SLOT(onSimPathChanged(QString, QString)));
110 }
111 }
112 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) {
113 interfaceList.insert(ModemManager::ModemDevice::SimpleInterface, ModemManager::ModemSimple::Ptr());
114 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) {
115 interfaceList.insert(ModemManager::ModemDevice::GsmInterface, ModemManager::Modem3gpp::Ptr());
116 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) {
117 interfaceList.insert(ModemManager::ModemDevice::GsmUssdInterface, ModemManager::Modem3gppUssd::Ptr());
118 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) {
119 interfaceList.insert(ModemManager::ModemDevice::CdmaInterface, ModemManager::ModemCdma::Ptr());
120 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) {
121 interfaceList.insert(ModemManager::ModemDevice::MessagingInterface, ModemManager::ModemMessaging::Ptr());
122 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) {
123 interfaceList.insert(ModemManager::ModemDevice::LocationInterface, ModemManager::ModemLocation::Ptr());
124 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) {
125 interfaceList.insert(ModemManager::ModemDevice::TimeInterface, ModemManager::ModemTime::Ptr());
126 }
127#if MM_CHECK_VERSION(1, 2, 0)
128 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) {
129 interfaceList.insert(ModemManager::ModemDevice::OmaInterface, ModemManager::ModemOma::Ptr());
130 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) {
131 interfaceList.insert(ModemManager::ModemDevice::SignalInterface, ModemManager::ModemSignal::Ptr());
132 }
133#endif
134 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) {
135 interfaceList.insert(ModemManager::ModemDevice::FirmwareInterface, ModemManager::ModemFirmware::Ptr());
136 }
137#if MM_CHECK_VERSION(1, 6, 0)
138 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) {
139 interfaceList.insert(ModemManager::ModemDevice::VoiceInterface, ModemManager::ModemVoice::Ptr());
140 }
141#endif
142 }
143 }
144
145 qCDebug(MMQT) << uni << "has interfaces:" << interfaceList.keys();
146}
147
148QString ModemManager::ModemDevicePrivate::introspect() const
149{
150 QDBusMessage call =
151 QDBusMessage::createMethodCall(QLatin1String(MMQT_DBUS_SERVICE), uni, QLatin1String(DBUS_INTERFACE_INTROSPECT), QLatin1String("Introspect"));
152#ifdef MMQT_STATIC
154#else
156#endif
157
158 if (reply.isValid()) {
159 return reply.value();
160 } else {
161 return QString();
162 }
163}
164
165ModemManager::ModemDevice::ModemDevice(const QString &path, QObject *parent)
166 : QObject(parent)
167 , d_ptr(new ModemDevicePrivate(path, this))
168{
169}
170
171ModemManager::ModemDevice::ModemDevice(ModemDevicePrivate &dd, QObject *parent)
172 : QObject(parent)
173 , d_ptr(&dd)
174{
175}
176
177ModemManager::ModemDevice::~ModemDevice()
178{
179 delete d_ptr;
180}
181
182ModemManager::Interface::List ModemManager::ModemDevicePrivate::interfaces()
183{
185
187 for (i = interfaceList.constBegin(); i != interfaceList.constEnd(); ++i) {
188 ModemManager::Interface::Ptr modemInterface = interface(i.key());
189 if (modemInterface) {
190 list.append(modemInterface);
191 } else {
192 qCWarning(MMQT) << "warning: null network Interface for" << i.key();
193 }
194 }
195
196 return list;
197}
198
199ModemManager::Interface::Ptr ModemManager::ModemDevicePrivate::interface(ModemManager::ModemDevice::InterfaceType type)
200{
201 ModemManager::Interface::Ptr modemInterface;
202
203 if (interfaceList.contains(type)) {
204 if (interfaceList.value(type)) {
205 modemInterface = interfaceList.value(type);
206 } else {
207 modemInterface = createInterface(type);
208 interfaceList[type] = modemInterface;
209 }
210 }
211
212 return modemInterface;
213}
214
215ModemManager::Interface::Ptr ModemManager::ModemDevicePrivate::createInterface(ModemManager::ModemDevice::InterfaceType type)
216{
217 ModemManager::Interface::Ptr createdInterface;
218 switch (type) {
219 case ModemManager::ModemDevice::ModemInterface:
221 break;
222 case ModemManager::ModemDevice::SimpleInterface:
224 break;
225 case ModemManager::ModemDevice::GsmInterface:
227 break;
228 case ModemManager::ModemDevice::GsmUssdInterface:
230 break;
231 case ModemManager::ModemDevice::CdmaInterface:
233 break;
234 case ModemManager::ModemDevice::MessagingInterface:
236 break;
237 case ModemManager::ModemDevice::LocationInterface:
239 break;
240 case ModemManager::ModemDevice::TimeInterface:
242 break;
243#if MM_CHECK_VERSION(1, 2, 0)
244 case ModemManager::ModemDevice::OmaInterface:
246 break;
247 case ModemManager::ModemDevice::SignalInterface:
249 break;
250#endif
251 case ModemManager::ModemDevice::FirmwareInterface:
253 break;
254#if MM_CHECK_VERSION(1, 6, 0)
255 case ModemManager::ModemDevice::VoiceInterface:
257 break;
258#endif
259 }
260 return createdInterface;
261}
262
263ModemManager::Bearer::Ptr ModemManager::ModemDevicePrivate::findBearer(const QString &uni)
264{
266 Q_FOREACH (const ModemManager::Bearer::Ptr &bearer, bearers()) {
267 if (bearer->uni() == uni) {
268 result = bearer;
269 break;
270 }
271 }
272
273 return result;
274}
275
276ModemManager::Bearer::List ModemManager::ModemDevicePrivate::bearers()
277{
278 Q_Q(ModemManager::ModemDevice);
279
280 return q->modemInterface()->listBearers();
281}
282
283ModemManager::Sim::Ptr ModemManager::ModemDevicePrivate::sim()
284{
285 return simCard;
286}
287
288QString ModemManager::ModemDevice::uni() const
289{
290 Q_D(const ModemDevice);
291 return d->uni;
292}
293
294bool ModemManager::ModemDevice::hasInterface(ModemManager::ModemDevice::InterfaceType type) const
295{
296 Q_D(const ModemDevice);
297 return d->interfaceList.contains(type);
298}
299
300ModemManager::Interface::Ptr ModemManager::ModemDevice::interface(ModemManager::ModemDevice::InterfaceType type) const
301{
302 Q_D(const ModemDevice);
303
304 return const_cast<ModemDevicePrivate *>(d)->interface(type);
305}
306
307ModemManager::Interface::List ModemManager::ModemDevice::interfaces() const
308{
309 Q_D(const ModemDevice);
310
311 return const_cast<ModemDevicePrivate *>(d)->interfaces();
312}
313
314ModemManager::ModemMessaging::Ptr ModemManager::ModemDevice::messagingInterface()
315{
316 Q_D(ModemDevice);
317
318 return d->interface(ModemManager::ModemDevice::MessagingInterface).objectCast<ModemManager::ModemMessaging>();
319}
320
321ModemManager::Modem::Ptr ModemManager::ModemDevice::modemInterface()
322{
323 Q_D(ModemDevice);
324
325 return d->interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>();
326}
327
328ModemManager::Bearer::Ptr ModemManager::ModemDevice::findBearer(const QString &uni)
329{
330 Q_D(ModemDevice);
331
332 return d->findBearer(uni);
333}
334
335ModemManager::Bearer::List ModemManager::ModemDevice::bearers() const
336{
337 Q_D(const ModemDevice);
338
339 return const_cast<ModemDevicePrivate *>(d)->bearers();
340}
341
342ModemManager::Sim::Ptr ModemManager::ModemDevice::sim() const
343{
344 Q_D(const ModemDevice);
345
346 return const_cast<ModemDevicePrivate *>(d)->sim();
347}
348
349bool ModemManager::ModemDevice::isGsmModem() const
350{
351 return hasInterface(ModemManager::ModemDevice::GsmInterface);
352}
353
354bool ModemManager::ModemDevice::isCdmaModem() const
355{
356 return hasInterface(ModemManager::ModemDevice::CdmaInterface);
357}
358
359void ModemManager::ModemDevicePrivate::onInterfacesAdded(const QDBusObjectPath &object_path, const MMVariantMapMap &interfaces_and_properties)
360{
361 Q_Q(ModemDevice);
362 if (object_path.path() != uni) {
363 return;
364 }
365
366 Q_FOREACH (const QString &iface, interfaces_and_properties.keys()) {
367 /* Don't store generic DBus interfaces */
368 if (iface.startsWith(QLatin1String(MMQT_DBUS_SERVICE))) {
369 if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) {
370 interfaceList.insert(ModemManager::ModemDevice::ModemInterface, ModemManager::Modem::Ptr());
371 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::ModemInterface);
372 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) {
373 interfaceList.insert(ModemManager::ModemDevice::SimpleInterface, ModemManager::ModemSimple::Ptr());
374 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::SimpleInterface);
375 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) {
376 interfaceList.insert(ModemManager::ModemDevice::GsmInterface, ModemManager::Modem3gpp::Ptr());
377 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::GsmInterface);
378 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) {
379 interfaceList.insert(ModemManager::ModemDevice::GsmUssdInterface, ModemManager::Modem3gppUssd::Ptr());
380 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::GsmUssdInterface);
381 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) {
382 interfaceList.insert(ModemManager::ModemDevice::CdmaInterface, ModemManager::ModemCdma::Ptr());
383 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::CdmaInterface);
384 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) {
385 interfaceList.insert(ModemManager::ModemDevice::MessagingInterface, ModemManager::ModemMessaging::Ptr());
386 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::MessagingInterface);
387 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) {
388 interfaceList.insert(ModemManager::ModemDevice::LocationInterface, ModemManager::ModemLocation::Ptr());
389 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::LocationInterface);
390 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) {
391 interfaceList.insert(ModemManager::ModemDevice::TimeInterface, ModemManager::ModemTime::Ptr());
392 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::TimeInterface);
393 }
394#if MM_CHECK_VERSION(1, 2, 0)
395 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) {
396 interfaceList.insert(ModemManager::ModemDevice::OmaInterface, ModemManager::ModemOma::Ptr());
397 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::OmaInterface);
398 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) {
399 interfaceList.insert(ModemManager::ModemDevice::SignalInterface, ModemManager::ModemSignal::Ptr());
400 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::SignalInterface);
401 }
402#endif
403 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) {
404 interfaceList.insert(ModemManager::ModemDevice::FirmwareInterface, ModemManager::ModemFirmware::Ptr());
405 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::FirmwareInterface);
406 }
407#if MM_CHECK_VERSION(1, 6, 0)
408 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) {
409 interfaceList.insert(ModemManager::ModemDevice::VoiceInterface, ModemManager::ModemVoice::Ptr());
410 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::VoiceInterface);
411 }
412#endif
413 }
414 }
415}
416
417void ModemManager::ModemDevicePrivate::onInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
418{
419 Q_Q(ModemDevice);
420 if (object_path.path() != uni) {
421 return;
422 }
423
424 if (interfaces.contains(QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) || interfaces.isEmpty()) {
425 if (simCard) {
426 Q_EMIT q->simRemoved(simCard->uni());
427 simCard = ModemManager::Sim::Ptr();
428 }
429 }
430
431 Q_FOREACH (const QString &iface, interfaces) {
432 if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) {
433 interfaceList.remove(ModemManager::ModemDevice::ModemInterface);
434 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::ModemInterface);
435 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) {
436 interfaceList.remove(ModemManager::ModemDevice::SimpleInterface);
437 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::SimpleInterface);
438 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) {
439 interfaceList.remove(ModemManager::ModemDevice::GsmInterface);
440 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::GsmInterface);
441 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) {
442 interfaceList.remove(ModemManager::ModemDevice::GsmUssdInterface);
443 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::GsmUssdInterface);
444 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) {
445 interfaceList.remove(ModemManager::ModemDevice::CdmaInterface);
446 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::CdmaInterface);
447 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) {
448 interfaceList.remove(ModemManager::ModemDevice::MessagingInterface);
449 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::MessagingInterface);
450 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) {
451 interfaceList.remove(ModemManager::ModemDevice::LocationInterface);
452 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::LocationInterface);
453 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) {
454 interfaceList.remove(ModemManager::ModemDevice::TimeInterface);
455 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::TimeInterface);
456 }
457#if MM_CHECK_VERSION(1, 2, 0)
458 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) {
459 interfaceList.remove(ModemManager::ModemDevice::OmaInterface);
460 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::OmaInterface);
461 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) {
462 interfaceList.remove(ModemManager::ModemDevice::SignalInterface);
463 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::SignalInterface);
464 }
465#endif
466 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) {
467 interfaceList.remove(ModemManager::ModemDevice::FirmwareInterface);
468 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::FirmwareInterface);
469 }
470#if MM_CHECK_VERSION(1, 6, 0)
471 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) {
472 interfaceList.remove(ModemManager::ModemDevice::VoiceInterface);
473 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::VoiceInterface);
474 }
475#endif
476 }
477}
478
479void ModemManager::ModemDevicePrivate::onSimPathChanged(const QString &oldPath, const QString &newPath)
480{
481 Q_Q(ModemDevice);
482
483 if (!oldPath.isEmpty() && simCard->uni() == oldPath) {
484 Q_EMIT q->simRemoved(oldPath);
485 simCard = ModemManager::Sim::Ptr();
486 }
487
488 if (!newPath.isEmpty()) {
490 Q_EMIT q->simAdded(newPath);
491 }
492}
493
494#include "moc_modemdevice.cpp"
495#include "moc_modemdevice_p.cpp"
The Modem3gppUssd class.
The Modem3gpp class.
Definition modem3gpp.h:32
The ModemCdma class.
Definition modemcdma.h:33
The ModemFirmware class.
The ModemLocation class.
The ModemMessaging class.
The ModemManager Open Mobile Alliance interface.
Definition modemoma.h:35
The ModemSignal class.
Definition modemsignal.h:30
The ModemSimple class.
Definition modemsimple.h:29
The ModemTime class.
Definition modemtime.h:89
The ModemVoice class.
Definition modemvoice.h:29
The Modem class.
Definition modem.h:147
The Sim class.
Definition sim.h:31
Type type(const QSqlDatabase &db)
QString path(const QString &relativePath)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
QString name(StandardAction id)
QCA_EXPORT void init()
QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode, int timeout) const const
bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
QDBusConnection sessionBus()
QDBusConnection systemBus()
QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method)
QString path() const const
bool isValid() const const
typename Select< 0 >::Type value() const const
QDomNodeList elementsByTagName(const QString &tagname) const const
ParseResult setContent(QAnyStringView text, ParseOptions options)
QString attribute(const QString &name, const QString &defValue) const const
bool isNull() const const
QDomElement toElement() const const
int count() const const
QDomNode item(int index) const const
void append(QList< T > &&value)
bool isEmpty() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void deleteLater()
T * data() const const
QSharedPointer< X > objectCast() const const
bool isEmpty() const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const
Q_D(Todo)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Mon Nov 18 2024 12:15:10 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.