QDBusPendingReply Class
La classe QDBusPendingReply contient la réponse à un appel de méthode asynchrone. Plus d'informations...
| En-tête : | #include <QDBusPendingReply> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS DBus)target_link_libraries(mytarget PRIVATE Qt6::DBus) |
| qmake : | QT += dbus |
| Hérite : | 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 modèle variadique. Les paramètres du modèle sont les types qui seront utilisés pour extraire le contenu des données de la réponse.
La fonctionnalité de cette classe est similaire à celle de QDBusReply, mais avec deux différences importantes :
- QDBusReply elle accepte exactement un type de retour, alors que QDBusPendingReply peut avoir n'importe quel nombre de types
- QDBusReply ne fonctionne que pour les réponses déjà complétées, alors que QDBusPendingReply permet d'attendre les réponses des 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 qui ont plus d'un argument de sortie, avec QDBusReply, vous écririez :
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) | Le nombre d'arguments que la réponse est censée avoir. |
Documentation des fonctions membres
QDBusPendingReply::QDBusPendingReply()
Crée un objet QDBusPendingReply vide. Sans l'attribution d'un objet QDBusPendingCall à cette réponse, QDBusPendingReply ne peut rien faire. Toutes les fonctions renvoient leurs valeurs d'échec.
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
Crée un objet QDBusPendingReply dont le contenu provient du message message. Dans ce cas, cet objet sera déjà dans son état fini 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 provient de l'appel asynchrone en attente call. Cet objet QDBusPendingReply partagera la même référence d'appel en attente que call.
[default] QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
Crée une copie de l'objet other QDBusPendingReply. 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.
[default, since 6.10] QDBusPendingReply::QDBusPendingReply(QDBusPendingReply<Types...> &&other)
Moves-construit un nouveau QDBusPendingReply à partir de other.
Cette fonction a été introduite dans Qt 6.10.
QVariant QDBusPendingReply::argumentAt(int index) const
Renvoie l'argument à la position index dans le contenu de la réponse. Si la réponse n'a pas autant d'éléments, la valeur de retour de cette fonction est indéfinie (elle provoquera probablement un échec 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 une valeur invalide QVariant. Étant donné que les messages D-Bus ne peuvent jamais contenir de variantes Q invalides, ce retour peut être utilisé pour détecter une condition d'erreur.
[constexpr] int QDBusPendingReply::count() const
Renvoie le nombre d'arguments que la réponse est censée avoir. Ce nombre correspond au nombre de paramètres 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 réponse d'erreur indiquant une mauvaise signature.
QDBusError QDBusPendingReply::error() const
Récupère le contenu de l'erreur du message de réponse, si son traitement est terminé. Si le message de réponse n'a pas fini d'être traité ou s'il contient un message de réponse normal (sans erreur), cette fonction renvoie une adresse invalide QDBusError.
bool QDBusPendingReply::isError() const
Renvoie true si la réponse contient un message d'erreur, false si elle contient une réponse de méthode normale.
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 si 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, en général, ne se produit que si vous revenez à l'exécution de la boucle d'événements.
Voir aussi QDBusPendingCallWatcher::isFinished().
bool QDBusPendingReply::isValid() const
Retourne true si la réponse contient un message de réponse normal, false si elle contient autre chose.
Si l'appel en attente n'a pas fini d'être traité, 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 une adresse QDBusMessage de type QDBusMessage::InvalidMessage.
Une fois le traitement terminé, le type de message sera soit un message d'erreur, soit un message de réponse à une méthode normale.
typename Select<0>::Type QDBusPendingReply::value() const
Renvoie le premier argument de cette réponse, coulé dans le type Types[0] (le premier paramètre du modèle de cette classe). Cela équivaut à appeler argumentAt<0>().
Cette fonction est fournie par commodité et correspond à la fonction QDBusReply::value().
Notez que si la réponse n'est pas arrivée, cette fonction bloque le 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. Après le retour de cette fonction, isFinished() doit renvoyer vrai, 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, coulé dans le type Types[0] (le premier paramètre du modèle de cette classe). Cela équivaut à appeler argumentAt<0>().
Cette fonction est fournie par commodité et correspond à la fonction QDBusReply::value().
Notez que si la réponse n'est pas arrivée, cette fonction bloque le 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().
[default, since 6.10] int &QDBusPendingReply::operator=(QDBusPendingReply<Types...> &&other)
Move attribue other à cette instance de QDBusPendingReply et supprime la référence à l'appel en cours. 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 n'y aura aucun moyen de récupérer le contenu de la réponse, lorsqu'il arrivera.
Cette fonction a été introduite dans Qt 6.10.
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)
Fait en sorte que cet objet prenne son contenu dans le message message et abandonne la référence à l'appel en cours. 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 n'y aura aucun moyen de récupérer le contenu de la réponse lorsqu'il arrivera.
Une fois cette fonction terminée, l'objet QDBusPendingReply sera dans son état "terminé" et le contenu de message sera accessible.
Voir aussi isFinished().
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)
Fait en sorte que cet objet prenne son contenu dans l'appel en attente call et abandonne la référence à l'appel en attente actuel. Si la référence actuelle renvoie à 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 n'y aura aucun moyen de récupérer le contenu de la réponse, lorsqu'il arrivera.
[default] int &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)
Fait une copie de other et abandonne la référence à l'appel en cours. Si la référence actuelle renvoie à 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 n'y aura aucun moyen de récupérer le contenu de la réponse, lorsqu'il arrivera.
© 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.