Возможно, вы захотите взглянуть на пример Qt DBus List Names .
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface dbus_iface("org.freedesktop.DBus", "/org/freedesktop/DBus",
"org.freedesktop.DBus", bus);
qDebug() << dbus_iface.call("ListNames").arguments().at(0);
Вот пример использования командной строки:
# qdbus --literal --system org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
{"org.freedesktop.DBus", ":1.23", ":1.31", "org.freedesktop.Avahi", ":1.24", ":1.26"}
# dbus-send --system --dest=org.freedesktop.DBus --print-reply=literal /org/freedesktop/DBus org.freedesktop.DBus.ListNames
array [
org.freedesktop.DBus :1.23 org.freedesktop.Avahi :1.24 :1.33 :1.26 ]
Вы также можете просто перейти непосредственно к источнику tools / qdbus / qdbus / qdbus.cpp в источнике qt.Там вы заметите, что если args.empty()
он вызывает printServiceNames()
, который просто возвращает результат registeredServiceNames()
, вызванный на интерфейсе для системной шины.Затем этот код выполняет следующее:
QDBusReply<QStringList> QDBusConnectionInterface::registeredServiceNames() const
{
return internalConstCall(QDBus::AutoDetect, QLatin1String("ListNames"));
}
Теперь мы прошли полный круг.