En esta página

QDBusPendingReply Class

La clase QDBusPendingReply contiene la respuesta a una llamada asíncrona a un método. Más...

Cabecera: #include <QDBusPendingReply>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
Inherits: QDBusPendingReplyBase

Tipos Públicos

enum { Count }

Funciones Públicas

QDBusPendingReply()
QDBusPendingReply(const QDBusMessage &message)
QDBusPendingReply(const QDBusPendingCall &call)
QDBusPendingReply(const QDBusPendingReply<Types...> &other)
(since 6.10) QDBusPendingReply(QDBusPendingReply<Types...> &&other)
QVariant argumentAt(int index) const
int count() const
QDBusError error() const
bool isError() const
bool isFinished() const
bool isValid() const
QDBusMessage reply() const
typename Select<0>::Type value() const
void waitForFinished()
operator typename Select<0>::Type() const
(since 6.10) int &operator=(QDBusPendingReply<Types...> &&other)
QDBusPendingReply<Types...> &operator=(const QDBusMessage &message)
QDBusPendingReply<Types...> &operator=(const QDBusPendingCall &call)
int &operator=(const QDBusPendingReply<Types...> &other)

Descripción detallada

QDBusPendingReply es una clase de plantilla variadic. Los parámetros de la plantilla son los tipos que se utilizarán para extraer el contenido de los datos de la respuesta.

Esta clase es similar en funcionalidad a QDBusReply, pero con dos diferencias importantes:

  • QDBusReply acepta exactamente un tipo de retorno, mientras que QDBusPendingReply puede tener cualquier número de tipos
  • QDBusReply sólo funciona con respuestas ya completadas, mientras que QDBusPendingReply permite esperar respuestas de llamadas pendientes

Donde con QDBusReply se escribiría

QDBusReply<QString> reply = interface->call("RemoteMethod");
if (reply.isValid())
    // use the returned value
    useValue(reply.value());
else
    // call failed. Show an error condition.
    showError(reply.error());

con QDBusPendingReply, el código equivalente (incluyendo la espera bloqueante de la respuesta) sería:

    QDBusPendingReply<QString> reply = iface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (reply.isError())
        // call failed. Show an error condition.
        showErrorD(reply.error());
    else
        // use the returned value
        useValue(reply.value());

Para llamadas a métodos que tienen más de un argumento de salida, con QDBusReply, se escribiría:

reply = interface->call("RemoteMethod");

mientras que con QDBusPendingReply, todos los argumentos de salida deben ser parámetros de plantilla:

    QDBusPendingReply<bool, QString> reply = iface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (!reply.isError()) {
        if (reply.argumentAt<0>())
            showSuccess(reply.argumentAt<1>());
        else
            showFailure(reply.argumentAt<1>());
    }

Los objetos QDBusPendingReply pueden asociarse con objetos QDBusPendingCallWatcher, que emiten señales cuando llega la respuesta.

Véase también QDBusPendingCallWatcher y QDBusReply.

Documentación de tipos de miembros

[anonymous] enum

ConstanteValorDescripción
QDBusPendingReply::Countstd::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types)El número de argumentos que se espera que tenga la respuesta

Documentación de la función miembro

QDBusPendingReply::QDBusPendingReply()

Crea un objeto QDBusPendingReply vacío. Sin asignar un objeto QDBusPendingCall a esta respuesta, QDBusPendingReply no puede hacer nada. Todas las funciones devuelven sus valores de fallo.

QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)

Crea un objeto QDBusPendingReply que tomará su contenido del mensaje message. En este caso, este objeto ya estará en su estado finalizado y el contenido de la respuesta será accesible.

Véase también isFinished().

QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)

Crea un objeto QDBusPendingReply que tomará su contenido de la llamada asíncrona pendiente call. Este objeto QDBusPendingReply compartirá la misma referencia de llamada pendiente que call.

[default] QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)

Crea una copia del objeto other QDBusPendingReply. Al igual que QDBusPendingCall y QDBusPendingCallWatcher, este objeto QDBusPendingReply compartirá la misma referencia de llamada pendiente. Todas las copias comparten los mismos valores de retorno.

[default, since 6.10] QDBusPendingReply::QDBusPendingReply(QDBusPendingReply<Types...> &&other)

Mueve-construye un nuevo QDBusPendingReply a partir de other.

Esta función fue introducida en Qt 6.10.

QVariant QDBusPendingReply::argumentAt(int index) const

Devuelve el argumento en la posición index del contenido de la respuesta. Si la respuesta no tiene tantos elementos, el valor de retorno de esta función es indefinido (probablemente provocará un fallo de aserción), por lo que es importante verificar que el procesamiento ha finalizado y la respuesta es válida.

Si la respuesta no contiene un argumento en la posición index o si la respuesta fue un error, esta función devuelve un QVariant inválido. Dado que los mensajes D-Bus nunca pueden contener QVariantes inválidas, este retorno puede utilizarse para detectar una condición de error.

[constexpr] int QDBusPendingReply::count() const

Devuelve el número de argumentos que se supone que tiene la respuesta. Este número coincide con el número de parámetros de plantilla no vacíos de esta clase.

Si la respuesta llega con un número diferente de argumentos (o con tipos diferentes), se transformará en una respuesta de error indicando una firma incorrecta.

QDBusError QDBusPendingReply::error() const

Recupera el contenido de error del mensaje de respuesta, si ha terminado de procesarse. Si el mensaje de respuesta no ha terminado de procesarse o si contiene un mensaje de respuesta normal (no error), esta función devuelve un QDBusError inválido.

bool QDBusPendingReply::isError() const

Devuelve true si la respuesta contiene un mensaje de error, false si contiene una respuesta de método normal.

Si la llamada pendiente no ha terminado de procesarse, esta función también devuelve true.

bool QDBusPendingReply::isFinished() const

Devuelve true si la llamada pendiente ha terminado de procesarse y se ha recibido la respuesta. Si esta función devuelve true, los métodos isError(), error() y reply() deberían devolver información válida.

Tenga en cuenta que esta función sólo cambia de estado si llama a waitForFinished() o si se produce un evento D-Bus externo, lo que en general sólo ocurre si se vuelve a la ejecución del bucle de eventos.

Véase también QDBusPendingCallWatcher::isFinished().

bool QDBusPendingReply::isValid() const

Devuelve true si la respuesta contiene un mensaje de respuesta normal, false si contiene cualquier otra cosa.

Si la llamada pendiente no ha terminado de procesarse, esta función devuelve false.

QDBusMessage QDBusPendingReply::reply() const

Recupera el mensaje de respuesta recibido para la llamada asíncrona enviada, si ha finalizado su procesamiento. Si la llamada pendiente no ha finalizado, esta función devuelve un QDBusMessage de tipo QDBusMessage::InvalidMessage.

Una vez finalizado el procesamiento, el tipo de mensaje será un mensaje de error o un mensaje de respuesta de método normal.

typename Select<0>::Type QDBusPendingReply::value() const

Devuelve el primer argumento de esta respuesta, convertido al tipo Types[0] (el primer parámetro de plantilla de esta clase). Esto equivale a llamar a argumentAt<0>().

Esta función se proporciona por conveniencia, coincidiendo con la función QDBusReply::value().

Tenga en cuenta que, si la respuesta no ha llegado, esta función hace que el hilo de llamada se bloquee hasta que se procese la respuesta.

Si la respuesta es una respuesta de error, esta función devuelve un objeto Types[0] construido por defecto, que puede ser indistinguible de un valor válido. Para determinar de forma fiable si el mensaje era un error, utilice isError().

void QDBusPendingReply::waitForFinished()

Suspende la ejecución de la hebra llamante hasta que se reciba y procese la respuesta. Tras el retorno de esta función, isFinished() debería devolver true, indicando que el contenido de la respuesta está listo para ser procesado.

Véase también QDBusPendingCallWatcher::waitForFinished().

QDBusPendingReply::operator typename Select<0>::Type() const

Devuelve el primer argumento de esta respuesta, convertido al tipo Types[0] (el primer parámetro de plantilla de esta clase). Esto equivale a llamar a argumentAt<0>().

Esta función se proporciona por conveniencia, coincidiendo con la función QDBusReply::value().

Tenga en cuenta que, si la respuesta no ha llegado, esta función hace que el hilo de llamada se bloquee hasta que se procese la respuesta.

Si la respuesta es una respuesta de error, esta función devuelve un objeto Types[0] construido por defecto, que puede ser indistinguible de un valor válido. Para determinar de forma fiable si el mensaje era un error, utilice isError().

[default, since 6.10] int &QDBusPendingReply::operator=(QDBusPendingReply<Types...> &&other)

Mover-asigna other a esta instancia QDBusPendingReply y elimina la referencia a la llamada pendiente actual. Si la referencia actual es a una llamada pendiente inacabada y esta es la última referencia, la llamada pendiente se cancelará y no habrá forma de recuperar el contenido de la respuesta, cuando llegue.

Esta función se introdujo en Qt 6.10.

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)

Hace que este objeto tome su contenido del mensaje message y elimina la referencia a la llamada pendiente actual. Si la referencia actual es a una llamada pendiente no finalizada y esta es la última referencia, la llamada pendiente se cancelará y no habrá forma de recuperar los contenidos de la respuesta, cuando lleguen.

Una vez finalizada esta función, el objeto QDBusPendingReply estará en su estado "finalizado" y los contenidos de message serán accesibles.

Véase también isFinished().

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)

Hace que este objeto tome su contenido de la llamada pendiente call y abandona la referencia a la llamada pendiente actual. Si la referencia actual es a una llamada pendiente no finalizada y esta es la última referencia, la llamada pendiente se cancelará y no habrá forma de recuperar los contenidos de la respuesta, cuando lleguen.

[default] int &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)

Hace una copia de other y elimina la referencia a la llamada pendiente actual. Si la referencia actual es a una llamada pendiente no finalizada y esta es la última referencia, la llamada pendiente se cancelará y no habrá forma de recuperar el contenido de la respuesta, cuando llegue.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.