Класс QDBusConnection
Класс QDBusConnection представляет собой соединение с демоном шины D-Bus. Подробнее...
| Заголовок: | #include <QDBusConnection> |
| CMake: | find_package(Qt6 COMPONENTS Dbus REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Dbus) |
| qmake: | QT += dbus |
Общедоступные типы
| Перечисление | ТипШины { ШинаСессии, ШинаСистемы, ШинаАктивации } |
| Флаги | ВозможностиСоединения |
| Перечисление | ВозможностьСоединения { ПередачаДескрипторовФайловUnix } |
| Перечисление | ПараметрРегистрации { ЭкспортАдаптеров, ЭкспортСкриптовыхСлотов, ЭкспортСкриптовыхСигналов, ЭкспортСкриптовыхСвойств, ЭкспортСкриптовыхВызываемыхОбъектов, …, ЭкспортВложенныхОбъектов } |
| Флаги | ПараметрыРегистрации |
| Перечисление | РежимУдаленияРегистрации { УдалитьУзел, УдалитьДерево } |
| Флаги | ПараметрыРегистрацииВиртуальныхОбъектов |
Общедоступные функции
| QDBusConnection(const QDBusConnection &other) | |
| QDBusConnection(const QString &name) | |
| QDBusConnection & | operator=(const QDBusConnection &other) |
| ~QDBusConnection() | |
| QDBusPendingCall | asyncCall(const QDBusMessage &message, int timeout = -1) const |
| QString | baseService() const |
| QDBusMessage | call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const |
| bool | callWithCallback(const QDBusMessage &message, QObject *receiver, const char *returnMethod, const char *errorMethod, int timeout = -1) const |
| bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot) |
| bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot) |
| bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot) |
| QDBusConnection::ConnectionCapabilities | connectionCapabilities() const |
| bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot) |
| bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot) |
| bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot) |
| QDBusConnectionInterface * | interface() const |
| bool | isConnected() const |
| QDBusError | последняяОшибка() const |
| QString | имя() const |
| QObject * | objectRegisteredAt(const QString &path) const |
| bool | registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors) |
| bool | registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors) |
| bool | registerService(const QString &serviceName) |
| bool | send(const QDBusMessage &message) const |
| void | swap(QDBusConnection &other) |
| void | unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = UnregisterNode) |
| bool | unregisterService(const QString &serviceName) |
Статические общедоступные члены
| QDBusConnection | connectToBus(QDBusConnection::BusType type, const QString &name) |
| QDBusConnection | connectToBus(const QString &address, const QString &name) |
| QDBusConnection | connectToPeer(const QString &address, const QString &name) |
| void | disconnectFromBus(const QString &name) |
| void | disconnectFromPeer(const QString &name) |
| QByteArray | localMachineId() |
| QDBusConnection | sessionBus() |
| QDBusConnection | systemBus() |
Подробное описание
Этот класс является отправной точкой в сеансе D-Bus. С его помощью можно получить доступ к удаленным объектам, интерфейсам, подключить удалённые сигналы к слотам вашего объекта, зарегистрировать объекты и т. д.
Соединения D-Bus создаются с помощью функции connectToBus(), которая открывает соединение с серверным демоном и выполняет начальный обмен данными, связывая это соединение с именем. Повторные попытки подключения с использованием того же имени вернут то же самое соединение.
Соединение затем разрывается с помощью функции disconnectFromBus().
После разрыва соединения, вызов connectToBus() не восстановит соединение, необходимо создать новый экземпляр QDBusConnection.
Для удобства работы с двумя наиболее распространенными типами соединений, функции sessionBus() и systemBus() возвращают открытые соединения с сеансовым серверным демоном и системным серверным демоном соответственно. Эти соединения открываются при первом использовании и закрываются при выполнении деструктора QCoreApplication.
D-Bus также поддерживает соединения «peer-to-peer» без необходимости в сервере демонов. Используя эту возможность, две программы могут общаться и обмениваться сообщениями. Это можно сделать, передав адрес в функцию connectToBus(), которая была открыта другой программой D-Bus с помощью QDBusServer.
Документация по типам членов
перечисление QDBusConnection::BusType
Определяет тип соединения шины. Допустимые типы шин:
| Константа | Значение | Описание |
|---|---|---|
QDBusConnection::SessionBus |
0 |
сеансовая шина, связанная с текущей сессией рабочего стола |
QDBusConnection::SystemBus |
1 |
системная шина, используемая для общения с системными процессами |
QDBusConnection::ActivationBus |
2 |
активационная шина, «псевдоним» для шины, которая запустила службу |
В сеансовой шине можно найти другие приложения одного пользователя, использующие ту же сессию рабочего стола (отсюда и название). В системной шине, однако, обычно находятся процессы, общие для всей системы.
перечисление QDBusConnection::ConnectionCapabilityфлаги QDBusConnection::ConnectionCapabilities
Это перечисление описывает доступные возможности для соединения D-Bus.
| Константа | Значение | Описание |
|---|---|---|
QDBusConnection::UnixFileDescriptorPassing |
0x0001 |
включает передачу дескрипторов Unix-файлов другим процессам (см. QDBusUnixFileDescriptor) |
Тип ConnectionCapabilities является типом-синонимом для QFlags<ConnectionCapability>. Он хранит логическое ИЛИ сочетание значений ConnectionCapability.
См. также connectionCapabilities().
перечисление QDBusConnection::RegisterOptionфлаги QDBusConnection::RegisterOptions
Указывает параметры для регистрации объектов в соединении. Возможные значения:
| Константа | Значение | Описание |
|---|---|---|
QDBusConnection::ExportAdaptors |
0x01 |
экспортирует содержимое адаптеров, найденных в этом объекте |
QDBusConnection::ExportScriptableSlots |
0x10 |
экспортирует слоты скрипта этого объекта |
QDBusConnection::ExportScriptableSignals |
0x20 |
экспортирует сигналы скрипта этого объекта |
QDBusConnection::ExportScriptableProperties |
0x40 |
экспортирует свойства скрипта этого объекта |
QDBusConnection::ExportScriptableInvokables |
0x80 |
экспортирует вызываемые скриптом методы этого объекта |
QDBusConnection::ExportScriptableContents |
0xf0 |
краткая форма ExportScriptableSlots | ExportScriptableSignals | ExportScriptableProperties |
QDBusConnection::ExportNonScriptableSlots |
0x100 |
экспортирует нескриптовые слоты этого объекта |
QDBusConnection::ExportNonScriptableSignals |
0x200 |
экспортирует нескриптовые сигналы этого объекта |
QDBusConnection::ExportNonScriptableProperties |
0x400 |
экспортирует нескриптовые свойства этого объекта |
QDBusConnection::ExportNonScriptableInvokables |
0x800 |
экспортирует нескриптовые вызываемые методы этого объекта |
QDBusConnection::ExportNonScriptableContents |
0xf00 |
краткая форма для ExportNonScriptableSlots | ExportNonScriptableSignals | ExportNonScriptableProperties |
QDBusConnection::ExportAllSlots |
ExportScriptableSlots|ExportNonScriptableSlots |
экспортирует все слоты этого объекта |
QDBusConnection::ExportAllSignals |
ExportScriptableSignals|ExportNonScriptableSignals |
экспортирует все сигналы этого объекта |
QDBusConnection::ExportAllProperties |
ExportScriptableProperties|ExportNonScriptableProperties |
экспортирует все свойства этого объекта |
QDBusConnection::ExportAllInvokables |
ExportScriptableInvokables|ExportNonScriptableInvokables |
экспортирует все вызываемые методы этого объекта |
QDBusConnection::ExportAllContents |
ExportScriptableContents|ExportNonScriptableContents |
экспортирует все содержимое этого объекта |
QDBusConnection::ExportChildObjects |
0x1000 |
экспортирует дочерние объекты этого объекта |
Тип RegisterOptions является типом-синонимом для QFlags<RegisterOption>. Он хранит логическое ИЛИ сочетание значений RegisterOption.
См. также registerObject(), QDBusAbstractAdaptor и Использование адаптеров.
перечисление QDBusConnection::UnregisterMode
Режим для отмены регистрации пути объекта:
| Константа | Значение | Описание |
|---|---|---|
QDBusConnection::UnregisterNode |
0 |
отключить только этот узел: не отключать дочерние объекты |
QDBusConnection::UnregisterTree |
1 |
отключить этот узел и все его поддеревья |
Однако, если этот объект был зарегистрирован с опцией ExportChildObjects, UnregisterNode также отключит дочерние объекты.
Документация функций-членов
QDBusConnection::QDBusConnection(const QDBusConnection &other)
Создаёт копию соединения other.
QDBusConnection::QDBusConnection(const QString &name)
Создаёт объект QDBusConnection, подключённый к соединению с именем name.
Это не открывает соединение. Для его открытия необходимо вызвать connectToBus().
QDBusConnection &QDBusConnection::operator=(const QDBusConnection &other)
Создаёт копию соединения other в этом объекте. Обратите внимание, что соединение, к которому ссылался этот объект до копирования, не отключается автоматически.
См. также disconnectFromBus().
QDBusConnection::~QDBusConnection()
Удаляет этот объект. Это не закрывает соединение: для этого необходимо вызвать disconnectFromBus().
QDBusPendingCall QDBusConnection::asyncCall(const QDBusMessage &message, int timeout = -1) const
Отправляет сообщение message по этому соединению и возвращается немедленно. Эта функция подходит только для вызовов методов. Она возвращает объект типа QDBusPendingCall, который можно использовать для отслеживания состояния ответа.
Если ответ не получен в течение timeout миллисекунд, будет автоматически доставлено сообщение об ошибке, указывающее на истечение срока ожидания вызова. Значение по умолчанию timeout — -1, которое будет заменено определённым реализацией значением, подходящим для межпроцессного взаимодействия (обычно, 25 секунд). Этот таймаут также является верхней границей ожидания в QDBusPendingCall::waitForFinished().
См. функцию QDBusInterface::asyncCall() для более удобного способа выполнения вызовов.
QString QDBusConnection::baseService() const
Возвращает уникальное имя соединения для этого соединения, если этот объект QDBusConnection подключён, или пустую строку QString в противном случае.
Уникальное имя соединения — это строка в формате ":x.xxx" (где x — десятичные цифры), которая назначается демоном сервера D-Bus при подключении. Оно однозначно идентифицирует этого клиента в шине.
Для соединений «точка-точка» эта функция возвращает пустую строку QString.
QDBusMessage QDBusConnection::call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const
Отправляет message по этому соединению и блокируется, ожидая ответа, в течение не более timeout миллисекунд. Эта функция подходит только для вызовов методов. Она возвращает сообщение ответа в качестве своего возвращаемого значения, которое будет либо типа QDBusMessage::ReplyMessage, либо QDBusMessage::ErrorMessage.
Если ответ не получен в течение timeout миллисекунд, будет автоматически доставлено сообщение об ошибке, указывающее на истечение времени ожидания вызова. Значение по умолчанию для timeout равно -1, которое будет заменено значением, определенным реализацией, подходящим для межпроцессного взаимодействия (как правило, 25 секунд).
См. функцию QDBusInterface::call() для более удобного способа выполнения вызовов.
Предупреждение: Если mode равен QDBus::BlockWithGui, эта функция повторно войдёт в цикл обработки событий Qt для ожидания ответа. Во время ожидания она может доставлять сигналы и другие вызовы методов вашему приложению. Поэтому оно должно быть готово обрабатывать повторный вход, когда вызов помещается с помощью call().
bool QDBusConnection::callWithCallback(const QDBusMessage &message, QObject *receiver, const char *returnMethod, const char *errorMethod, int timeout = -1) const
Отправляет message по этому соединению и возвращает значение немедленно. При получении ответа метод returnMethod вызывается в объекте receiver. Если произойдёт ошибка, вместо этого вызывается метод errorMethod.
Если ответ не получен в течение timeout миллисекунд, будет автоматически доставлено сообщение об ошибке, указывающее на истечение времени ожидания вызова. Значение по умолчанию для timeout равно -1, которое будет заменено значением, определенным реализацией, подходящим для межпроцессного взаимодействия (как правило, 25 секунд).
Эта функция подходит только для вызовов методов. Гарантируется, что слот будет вызван ровно один раз с ответом, при условии совпадения типов параметров и отсутствия ошибок.
Возвращает true если сообщение было отправлено, или false, если сообщение не смогло быть отправлено.
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
Подключает сигнал, заданный параметрами service, path, interface и name, к слоту slot в объекте receiver. Аргументы service и path могут быть пустыми, обозначая подключение к любому сигналу пары (interface, name) от любого удалённого приложения.
Возвращает true если подключение было успешно.
Предупреждение: Сигнал будет доставлен только в слот, если параметры совпадают. Эта проверка может быть выполнена только при получении сигнала, а не во время подключения.
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot)
Это перегруженная функция.
Подключает сигнал к слоту slot в объекте receiver. В отличие от предыдущего перегруженного метода connect(), эта функция позволяет указать сигнатуру параметров, подключаемых с помощью переменной signature. Функция затем проверит, может ли эта сигнатура быть доставлена слоту, указанному slot, и вернёт false в противном случае.
Возвращает true если подключение было успешно.
Примечание: Функция проверяет, что сигнатура сигнала соответствует параметрам слота, но не проверяет, существует ли фактически сигнал с заданной сигнатурой в удалённой службе.
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot)
Это перегруженная функция.
Подключает сигнал к слоту slot в объекте receiver. В отличие от предыдущего перегруженного метода connect(), эта функция позволяет указать сигнатуру параметров, подключаемых с помощью переменной signature. Функция затем проверит, может ли эта сигнатура быть доставлена слоту, указанному slot, и вернёт false в противном случае.
Параметр argumentMatch перечисляет строковые параметры для сопоставления в последовательном порядке. Обратите внимание, что для сопоставления пустой строки необходимо передать QString, который пустой, но не null (т.е., QString("")). Null QString пропускает сопоставление в этой позиции.
Возвращает true если подключение было успешно.
Примечание: Функция проверяет, что сигнатура сигнала соответствует параметрам слота, но не проверяет, существует ли фактически сигнал с заданной сигнатурой в удалённой службе.
[static] QDBusConnection QDBusConnection::connectToBus(QDBusConnection::BusType type, const QString &name)
Открывает соединение типа type с одним из известных автобусов и связывает с ним имя соединения name. Возвращает объект QDBusConnection, связанный с этим соединением.
[static] QDBusConnection QDBusConnection::connectToBus(const QString &address, const QString &name)
Открывает соединение с частным автобусом по адресу address и связывает с ним имя соединения name. Возвращает объект QDBusConnection, связанный с этим соединением.
[static] QDBusConnection QDBusConnection::connectToPeer(const QString &address, const QString &name)
Открывает соединение «равноправный с равным» по адресу address и связывает с ним имя соединения name. Возвращает объект QDBusConnection, связанный с этим соединением.
QDBusConnection::ConnectionCapabilities QDBusConnection::connectionCapabilities() const
Возвращает возможности этого соединения, согласованные с сервером автобуса или с узлом. Если это QDBusConnection не подключено, эта функция возвращает не имеющие возможностей.
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
Отключает сигнал, заданный параметрами service, path, interface и name, от слота slot в объекте receiver. Аргументы должны быть такими же, как и передаваемые функции connect().
Возвращает true если отключение было успешно.
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot)
Это перегруженная функция.
Отключает сигнал, заданный параметрами service, path, interface, name и signature, от слота slot в объекте receiver. Аргументы должны быть такими же, как и передаваемые функции connect().
Возвращает true если отключение было успешно.
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot)
Это перегруженный метод.
Отключает сигнал, указанный параметрами service, path, interface, name, argumentMatch и signature, от слота slot в объекте receiver. Аргументы должны быть такими же, как и те, что переданы в функцию connect().
Возвращает true, если отключение прошло успешно.
[static] void QDBusConnection::disconnectFromBus(const QString &name)
Закрывает соединение с шиной с именем name.
Обратите внимание, что если с этим соединением все еще связаны объекты QDBusConnection, соединение не будет закрыто, пока все ссылки не будут удалены. Однако больше ссылок создать с помощью конструктора QDBusConnection нельзя.
[static] void QDBusConnection::disconnectFromPeer(const QString &name)
Закрывает соединение с узлом с именем name.
Обратите внимание, что если с этим соединением все еще связаны объекты QDBusConnection, соединение не будет закрыто, пока все ссылки не будут удалены. Однако больше ссылок создать с помощью конструктора QDBusConnection нельзя.
QDBusConnectionInterface *QDBusConnection::interface() const
Возвращает объект QDBusConnectionInterface, представляющий интерфейс сервера D-Bus в этом соединении.
bool QDBusConnection::isConnected() const
Возвращает true, если этот объект QDBusConnection подключен.
QDBusError QDBusConnection::lastError() const
Возвращает последнюю ошибку, произошедшую в этом соединении.
Эта функция предназначена для кода низкого уровня. Если вы используете QDBusInterface::call(), коды ошибок сообщаются её возвращаемым значением.
См. также QDBusInterface и QDBusMessage.
[static] QByteArray QDBusConnection::localMachineId()
Возвращает идентификатор локальной машины, известный системе D-Bus. Каждый узел или хост, на котором работает D-Bus, имеет уникальный идентификатор, который может использоваться для различения его от других хостов, если они разделяют ресурсы, такие как файловая система.
Обратите внимание, что идентификатор локальной машины не гарантируется, что будет сохраняться после перезагрузки системы, поэтому этот идентификатор не следует хранить в постоянном хранилище (например, в файловой системе). Он гарантируется неизменным только в течение текущей сессии работы.
QString QDBusConnection::name() const
Возвращает имя соединения для данного соединения, как указано в параметре name функции connectToBus().
Имя соединения может использоваться для уникальной идентификации фактических базовых соединений с шинами. Копии, созданные из одного соединения, всегда неявно разделяют базовое соединение и, следовательно, имеют то же имя соединения.
В свою очередь, два соединения с разными именами соединения всегда будут подключены к разным шинам или иметь разное уникальное имя (как возвращает baseService()) на этой шине.
См. также connectToBus() и disconnectFromBus().
QObject *QDBusConnection::objectRegisteredAt(const QString &path) const
Возвращает объект, который был зарегистрирован с помощью registerObject() по указанному пути объекта path.
bool QDBusConnection::registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
Регистрирует объект object по пути path и возвращает true, если регистрация прошла успешно. Параметр options определяет, какая часть объекта object будет экспортирована через D-Bus.
Эта функция не заменяет существующие объекты: если объект уже зарегистрирован по пути path, функция вернёт false. Сначала используйте unregisterObject(), чтобы его отменить.
Флаг ExportChildObjects экспортирует дочерние объекты в D-Bus, основываясь на пути зарегистрированных объектов и имени объекта QObject::objectName дочернего объекта. Поэтому важно, чтобы у дочернего объекта было имя.
Вы не можете зарегистрировать объект как дочерний объект для объекта, зарегистрированного с ExportChildObjects.
[since 5.5] bool QDBusConnection::registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
Это перегруженный метод.
Регистрирует объект object по пути path с именем интерфейса interface и возвращает true, если регистрация прошла успешно. Параметр options определяет, какая часть объекта object будет экспортирована через D-Bus.
Эта функция не заменяет существующие объекты: если объект уже зарегистрирован по пути path, функция вернёт false. Сначала используйте unregisterObject(), чтобы его отменить.
Флаг ExportChildObjects экспортирует дочерние объекты в D-Bus, основываясь на пути зарегистрированных объектов и имени объекта QObject::objectName дочернего объекта. Поэтому важно, чтобы у дочернего объекта было имя.
Вы не можете зарегистрировать объект как дочерний объект для объекта, зарегистрированного с ExportChildObjects.
Эта функция была добавлена в Qt 5.5.
bool QDBusConnection::registerService(const QString &serviceName)
Попытка зарегистрировать serviceName на сервере D-Bus и возвращает true, если регистрация прошла успешно. Регистрация завершится неудачно, если имя уже зарегистрировано другим приложением.
См. также unregisterService() и QDBusConnectionInterface::registerService().
bool QDBusConnection::send(const QDBusMessage &message) const
Отправляет сообщение message по этому соединению без ожидания ответа. Подходит для ошибок, сигналов, возвращаемых значений, а также вызовов, для которых возвращаемые значения не нужны.
Возвращает true, если сообщение было успешно поставлено в очередь, в противном случае false.
[static] QDBusConnection QDBusConnection::sessionBus()
Возвращает объект QDBusConnection, открытый с сеансовой шиной. Ссылка на объект, возвращённую этой функцией, действительна до завершения приложения, в этот момент соединение будет закрыто, а объект удалён.
void QDBusConnection::swap(QDBusConnection &other)
Меняет местами это соединение QDBusConnection с other.
[static] QDBusConnection QDBusConnection::systemBus()
Возвращает объект QDBusConnection, открытый с системной шиной. Ссылка на возвращенный объект действительна до завершения деструктора QCoreApplication, в этот момент соединение будет закрыто, и объект удален.
void QDBusConnection::unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = UnregisterNode)
Удаляет объект, зарегистрированный с помощью registerObject() по указанному пути объекта path и, если mode равен QDBusConnection::UnregisterTree, все его дочерние объекты тоже.
Обратите внимание, что вы не можете удалить объекты, которые не были зарегистрированы с помощью registerObject().
bool QDBusConnection::unregisterService(const QString &serviceName)
Отменяет регистрацию службы serviceName, ранее зарегистрированной с помощью registerService(), и возвращает true в случае успеха.
См. также registerService() и QDBusConnectionInterface::unregisterService().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qdbusconnection.html