QDBusPendingReply Class
La classe `QDBusPendingReply` contient la réponse à un appel de méthode asynchrone. En savoir plus…
| En-tête : | #include <QDBusPendingReply> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
| qmake : | QT += dbus |
| Hérite de : | QDBusPendingReplyBase |
Types publics
| enum { Count } |
Fonctions publiques
| 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) |
Description détaillée
La classe QDBusPendingReply est une classe de modèle à nombre variable de paramètres. Les paramètres du modèle correspondent aux types qui seront utilisés pour extraire le contenu des données de la réponse.
Cette classe présente des fonctionnalités similaires à celles de ` QDBusReply`, mais avec deux différences importantes :
- QDBusReply n'accepte qu'un seul type de retour, alors que QDBusPendingReply peut en accepter un nombre illimité
- QDBusReply ne fonctionne que sur des réponses déjà terminées, alors que `QDBusPendingReply` permet d’attendre les réponses d’appels en attente
Alors qu’avec ` QDBusReply `, vous écririez :
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());avec QDBusPendingReply, le code équivalent (y compris l'attente bloquante de la réponse) serait :
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());Pour les appels de méthode comportant plusieurs arguments de sortie, avec ` QDBusReply`, on écrirait :
reply = interface->call("RemoteMethod");alors qu’avec `QDBusPendingReply`, tous les arguments de sortie doivent être des paramètres de modèle :
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>());
}Les objets `QDBusPendingReply` peuvent être associés à des objets ` QDBusPendingCallWatcher `, qui émettent des signaux lorsque la réponse arrive.
Voir également QDBusPendingCallWatcher et QDBusReply.
Documentation sur les types de membres
[anonymous] enum
| Constante | Valeur | Description |
|---|---|---|
QDBusPendingReply::Count | std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) | Nombre d'arguments attendus dans la réponse |
Documentation des fonctions membres
[default] QDBusPendingReply::QDBusPendingReply()
Crée un objet `QDBusPendingReply` vide. Si aucun objet ` QDBusPendingCall ` n'est associé à cette réponse, `QDBusPendingReply` ne peut rien faire. Toutes les fonctions renvoient alors leurs valeurs d'échec.
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
Crée un objet `QDBusPendingReply` dont le contenu proviendra du message message. Dans ce cas, cet objet sera déjà dans son état « terminé » et le contenu de la réponse sera accessible.
Voir aussi ` isFinished()`.
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
Crée un objet `QDBusPendingReply` dont le contenu proviendra de l'appel asynchrone en attente ` call `. Cet objet `QDBusPendingReply` partagera la même référence d'appel en attente que ` call`.
[implicit] QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
Crée une copie de l'objet `QDBusPendingReply` de ` other `. Tout comme ` QDBusPendingCall ` et ` QDBusPendingCallWatcher`, cet objet `QDBusPendingReply` partagera la même référence d'appel en attente. Toutes les copies partagent les mêmes valeurs de retour.
[implicit, since 6.10] QDBusPendingReply::QDBusPendingReply(QDBusPendingReply<Types...> &&other)
Moves : construit un nouvel objet `QDBusPendingReply` à partir de ` other`.
Cette fonction a été introduite dans Qt 6.10.
QVariant QDBusPendingReply::argumentAt(int index) const
Renvoie l'argument situé à la position index dans le contenu de la réponse. Si la réponse ne comporte pas autant d'éléments, la valeur de retour de cette fonction est indéfinie (ce qui provoquera probablement une erreur d'assertion) ; il est donc important de vérifier que le traitement est terminé et que la réponse est valide.
Si la réponse ne contient pas d'argument à la position index ou si la réponse était une erreur, cette fonction renvoie un ` QVariant` invalide. Étant donné que les messages D-Bus ne peuvent jamais contenir de `QVariants` invalides, cette valeur de retour peut être utilisée pour détecter une condition d'erreur.
[constexpr] int QDBusPendingReply::count() const
Renvoie le nombre d'arguments que la réponse est censée comporter. Ce nombre correspond au nombre de paramètres de modèle non vides de cette classe.
Si la réponse arrive avec un nombre d'arguments différent (ou avec des types différents), elle sera transformée en une réponse d'erreur indiquant une signature incorrecte.
QDBusError QDBusPendingReply::error() const
Récupère le contenu de l'erreur du message de réponse, si son traitement est terminé. Si le traitement du message de réponse n'est pas terminé ou s'il s'agit d'un message de réponse normal (sans erreur), cette fonction renvoie une valeur non valide QDBusError.
bool QDBusPendingReply::isError() const
Renvoie « true » si la réponse contient un message d'erreur, et « false » si elle contient une réponse normale de la méthode.
Si le traitement de l'appel en attente n'est pas terminé, cette fonction renvoie également « true ».
bool QDBusPendingReply::isFinished() const
Renvoie ` true ` si le traitement de l'appel en attente est terminé et que la réponse a été reçue. Si cette fonction renvoie ` true`, les méthodes ` isError()`, ` error()` et ` reply()` doivent renvoyer des informations valides.
Notez que cette fonction ne change d’état que si vous appelez ` waitForFinished()` ou si un événement D-Bus externe se produit, ce qui n’arrive en général que si vous revenez à l’exécution de la boucle d’événements.
Voir également QDBusPendingCallWatcher::isFinished().
bool QDBusPendingReply::isValid() const
Renvoie « true » si la réponse contient un message de réponse standard, et « false » si elle contient autre chose.
Si le traitement de l'appel en attente n'est pas terminé, cette fonction renvoie « false ».
QDBusMessage QDBusPendingReply::reply() const
Récupère le message de réponse reçu pour l'appel asynchrone qui a été envoyé, si son traitement est terminé. Si l'appel en attente n'est pas terminé, cette fonction renvoie un objet ` QDBusMessage ` de type ` QDBusMessage::InvalidMessage`.
Une fois son traitement terminé, le message sera soit un message d'erreur, soit un message de réponse normal de la méthode.
typename Select<0>::Type QDBusPendingReply::value() const
Renvoie le premier argument de cette réponse, converti au type ` Types[0] ` (le premier paramètre de modèle de cette classe). Cela revient à appeler ` argumentAt<0>()`.
Cette fonction est fournie à titre de commodité, en correspondance avec la fonction QDBusReply::value().
Notez que, si la réponse n’est pas encore arrivée, cette fonction provoque le blocage du thread appelant jusqu’à ce que la réponse soit traitée.
Si la réponse est une réponse d’erreur, cette fonction renvoie un objet ` Types[0] ` construit par défaut, qui peut être impossible à distinguer d’une valeur valide. Pour déterminer de manière fiable si le message était une erreur, utilisez ` isError()`.
void QDBusPendingReply::waitForFinished()
Suspend l'exécution du thread appelant jusqu'à ce que la réponse soit reçue et traitée. Une fois que cette fonction a renvoyé une valeur, la fonction isFinished() doit renvoyer « true », indiquant que le contenu de la réponse est prêt à être traité.
Voir également QDBusPendingCallWatcher::waitForFinished().
QDBusPendingReply::operator typename Select<0>::Type() const
Renvoie le premier argument de cette réponse, converti au type Types[0] (le premier paramètre de modèle de cette classe). Cela revient à appeler argumentAt<0>().
Cette fonction est fournie à titre de commodité, en correspondance avec la fonction QDBusReply::value().
Notez que, si la réponse n’est pas encore arrivée, cette fonction provoque le blocage du thread appelant jusqu’à ce que la réponse soit traitée.
Si la réponse est une réponse d'erreur, cette fonction renvoie un objet ` Types[0] ` construit par défaut, qui peut être impossible à distinguer d'une valeur valide. Pour déterminer de manière fiable si le message était une erreur, utilisez ` isError()`.
[implicit, since 6.10] int &QDBusPendingReply::operator=(QDBusPendingReply<Types...> &&other)
Cette fonction attribue par déplacement l'objet ` other ` à cette instance de ` QDBusPendingReply ` et supprime la référence à l'appel en attente actuel. Si la référence actuelle concerne un appel en attente non terminé et qu'il s'agit de la dernière référence, l'appel en attente sera annulé et il ne sera plus possible de récupérer le contenu de la réponse, le cas échéant.
Cette fonction a été introduite dans Qt 6.10.
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)
Cette fonction fait en sorte que cet objet récupère son contenu à partir du message « message » et supprime la référence à l'appel en attente actuel. Si la référence actuelle concerne un appel en attente non terminé et qu'il s'agit de la dernière référence, l'appel en attente sera annulé et il ne sera plus possible de récupérer le contenu de la réponse, lorsqu'elle arrivera.
Une fois cette fonction terminée, l’objet ` QDBusPendingReply ` se trouvera dans son état « terminé » et le contenu de ` message ` sera accessible.
Voir également isFinished().
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)
Cette méthode permet à cet objet de récupérer le contenu de l'appel en attente « call » et supprime la référence à l'appel en attente actuel. Si la référence actuelle concerne un appel en attente non terminé et qu'il s'agit de la dernière référence, l'appel en attente sera annulé et il ne sera plus possible de récupérer le contenu de la réponse lorsqu'elle arrivera.
[implicit] int &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)
Crée une copie de ` other ` et supprime la référence à l'appel en attente actuel. Si la référence actuelle concerne un appel en attente non terminé et qu'il s'agit de la dernière référence, l'appel en attente sera annulé et il ne sera plus possible de récupérer le contenu de la réponse, le cas échéant.
© 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.