QPointer Class
template <typename T> class QPointerLa classe `QPointer` est une classe modèle qui fournit des pointeurs protégés vers QObject. En savoir plus...
| En-tête : | #include <QPointer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
Comparaisons de QPointer
| Catégorie | Types comparables | Description |
|---|---|---|
| égalité | QPointer | |
| égalité | QPointer<X>, X* et std::nullptr_t. | Où X et T sont des types compatibles, ce qui signifie qu’ils sont soit identiques (à l’exception de leurs qualificatifs cv), soit que l’un est un type de base de l’autre. |
Fonctions publiques
| QPointer() | |
(since 6.6) | QPointer(QPointer<X> &&other) |
| QPointer(T *p) | |
(since 6.6) | QPointer(const QPointer<X> &other) |
| QPointer(std::nullptr_t) | |
| ~QPointer() | |
| void | clear() |
| T * | data() const |
(since 6.0) T * | get() const |
| bool | isNull() const |
| void | swap(QPointer<T> &other) |
| operator T *() const | |
| T & | operator*() const |
| T * | operator->() const |
(since 6.6.1) QPointer<T> & | operator=(QPointer<X> &&other) |
| QPointer<T> & | operator=(T *p) |
(since 6.6) QPointer<T> & | operator=(const QPointer<X> &other) |
Éléments non membres associés
| bool | operator!=(X *const &lhs, const QPointer<T> &rhs) |
| bool | operator!=(const QPointer<T> &lhs, X *const &rhs) |
| bool | operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs) |
| bool | operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs) |
| bool | operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs) |
| bool | operator==(X *const &lhs, const QPointer<T> &rhs) |
| bool | operator==(const QPointer<T> &lhs, X *const &rhs) |
| bool | operator==(const QPointer<T> &lhs, const QPointer<X> &rhs) |
| bool | operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs) |
| bool | operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs) |
Description détaillée
Un pointeur protégé, QPointer<T>, se comporte comme un pointeur C++ normal T *, à l’exception qu’il est automatiquement réinitialisé lorsque l’objet référencé est détruit (contrairement aux pointeurs C++ normaux, qui deviennent des « pointeurs pendants » dans de tels cas). Le paramètre de modèle ` T ` spécifie le type dérivé de ` QObject` vers lequel pointe le pointeur ; ` T ` doit être une sous-classe de ` QObject`.
Les pointeurs protégés sont utiles chaque fois que vous devez stocker un pointeur vers une « QObject » appartenant à quelqu’un d’autre, et qui pourrait donc être détruite alors que vous en détenez encore une référence. Vous pouvez vérifier la validité du pointeur en toute sécurité.
Notez que Qt 5 introduit un léger changement de comportement lors de l’utilisation de QPointer.
- Lors de l’utilisation de QPointer sur une QWidget (ou une sous-classe de QWidget), auparavant, le QPointer était effacé par le destructeur de QWidget. Désormais, le QPointer est effacé par le destructeur de QObject (puisque c’est à ce moment-là que les objets QWeakPointer sont effacés). Les QPointers pointant vers un widget ne seront PAS libérés avant que le destructeur de QWidget ne détruise les enfants du widget concerné.
Qt fournit également QSharedPointer, une implémentation d'un objet pointeur partagé à comptage de références, qui peut être utilisé pour gérer un ensemble de références vers un pointeur individuel.
Exemple :
Si l’ QLabel est supprimé entre-temps, la variable ` label ` contiendra ` nullptr ` au lieu d’une adresse invalide, et la dernière ligne ne sera jamais exécutée.
Les fonctions et opérateurs disponibles avec un QPointer sont les mêmes que ceux disponibles avec un pointeur normal non protégé, à l’exception des opérateurs d’arithmétique de pointeurs (+, -, ++ et --), qui ne sont normalement utilisés qu’avec des tableaux d’objets.
Utilisez les QPointers comme des pointeurs normaux et vous n’aurez pas besoin de lire la documentation de cette classe.
Pour créer des pointeurs protégés, vous pouvez les construire ou leur attribuer une valeur à partir d’un T* ou d’un autre pointeur protégé du même type. Vous pouvez les comparer entre eux à l’aide des opérateurs ==() et !=(), ou vérifier s’ils sont de type nullptr à l’aide de isNull(). Vous pouvez les déréférencer en utilisant soit la notation *x, soit la notation x->member.
Un pointeur protégé sera automatiquement converti en T *, ce qui vous permet de mélanger librement les pointeurs protégés et non protégés. Cela signifie que si vous disposez d’un QPointer<QWidget>, vous pouvez le passer à une fonction qui requiert un QWidget *. Pour cette raison, il n’est guère utile de déclarer des fonctions prenant un QPointer en paramètre ; utilisez simplement des pointeurs normaux. Utilisez un QPointer lorsque vous stockez un pointeur pendant un certain temps.
Notez que la classe T doit hériter de QObject, sous peine de provoquer une erreur de compilation ou de liaison.
Voir également QSharedPointer, QObject et QObjectCleanupHandler.
Documentation sur les fonctions membres
[noexcept default] QPointer::QPointer()
[constexpr noexcept] QPointer::QPointer(std::nullptr_t)
Crée un pointeur protégé dont la valeur est nullptr.
Voir aussi isNull().
[noexcept, since 6.6] template <typename X> requires if_convertible<X> QPointer::QPointer(QPointer<X> &&other)
[noexcept, since 6.6] template <typename X> requires if_convertible<X> QPointer::QPointer(const QPointer<X> &other)
Constructeur de conversion. Crée un nouvel objet ` QPointer ` en déplaçant ou en copiant le contenu de ` other`.
L'QPointer à partir de laquelle le déplacement a été effectué est réinitialisée à nullptr.
Remarque : ces constructeurs ne participent à la résolution des surcharges que si ` X* ` est convertible en ` T*`.
Ces fonctions ont été introduites dans Qt 6.6.
QPointer::QPointer(T *p)
Crée un pointeur protégé qui pointe vers le même objet que celui vers lequel pointe p.
QPointer::~QPointer()
Détruit le pointeur protégé. Tout comme pour un pointeur classique, la destruction d'un pointeur protégé n' entraîne pas la destruction de l'objet vers lequel il pointe.
[noexcept] void QPointer::clear()
Efface cet objet « QPointer ».
Voir également isNull().
[noexcept] T *QPointer::data() const
Renvoie le pointeur vers l'objet protégé.
[noexcept, since 6.0] T *QPointer::get() const
Identique à ` data()`. Cette fonction est fournie à des fins de compatibilité avec la STL.
Cette fonction a été introduite dans Qt 6.0.
[noexcept] bool QPointer::isNull() const
Renvoie « true » si l'objet référencé a été détruit ou s'il n'existe aucun objet référencé ; sinon, renvoie « false ».
[noexcept] void QPointer::swap(QPointer<T> &other)
Permute ce pointeur avec other. Cette opération est très rapide et ne rencontre jamais d'échec.
[noexcept] QPointer::operator T *() const
Opérateur de conversion ; met en œuvre la sémantique des pointeurs. Grâce à cette fonction, vous pouvez passer un objet de type QPointer<T> à une fonction qui requiert un T*.
[noexcept] T &QPointer::operator*() const
Opérateur de déréférencement ; implémente la sémantique des pointeurs. Il suffit d'utiliser cet opérateur comme vous le feriez avec un pointeur C++ classique.
[noexcept] T *QPointer::operator->() const
Opérateur flèche surchargé ; implémente la sémantique des pointeurs. Il suffit d'utiliser cet opérateur comme vous le feriez avec un pointeur C++ classique.
[noexcept, since 6.6.1] template <typename X> requires if_convertible<X> QPointer<T> &QPointer::operator=(QPointer<X> &&other)
Opérateur de conversion « move-assignment ». Fait en sorte que ce pointeur protégé protège le même objet que celui protégé par other et réinitialise other à nullptr.
Contraintes
Ne participe à la résolution des surcharges que si ` X* ` est convertible en ` T*`.
Cette fonction a été introduite dans Qt 6.6.1.
QPointer<T> &QPointer::operator=(T *p)
Opérateur d'affectation. Ce pointeur protégé va désormais pointer vers le même objet que celui vers lequel pointe p.
[noexcept, since 6.6] template <typename X> requires if_convertible<X> QPointer<T> &QPointer::operator=(const QPointer<X> &other)
Opérateur de conversion. Permet à ce pointeur protégé de pointer vers le même objet que celui protégé par ` other`.
Contraintes
Ne participe à la résolution des surcharges que si ` X* ` est convertible en ` T*`.
Cette fonction a été introduite dans Qt 6.6.
Éléments non membres associés
[noexcept] template <typename X> bool operator!=(X *const &lhs, const QPointer<T> &rhs)
Opérateur d'inégalité. Renvoie « true » si « lhs » et le pointeur protégé « rhs » ne pointent pas vers le même objet ; sinon, renvoie « false ».
[noexcept] template <typename X> bool operator!=(const QPointer<T> &lhs, X *const &rhs)
Opérateur d’inégalité. Renvoie true si rhs et le pointeur protégé lhs ne pointent pas vers le même objet ; sinon, renvoie false.
[noexcept(...)] template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)
Opérateur d'inégalité. Renvoie true si les pointeurs protégés lhs et rhs ne pointent pas vers le même objet ; sinon, renvoie false.
Remarque : cette fonction est « noexcept » lorsque true est égal à true.
[noexcept] bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)
Opérateur d'inégalité. Renvoie true si le pointeur protégé par lhs est un pointeur valide (c'est-à-dire non nullptr), sinon renvoie false.
[noexcept] bool operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs)
Opérateur d'inégalité. Renvoie « true » si le pointeur protégé par « rhs » est un pointeur valide (c'est-à-dire non « nullptr »), sinon renvoie « false ».
[noexcept] template <typename X> bool operator==(X *const &lhs, const QPointer<T> &rhs)
Opérateur d'égalité. Renvoie true si lhs et le pointeur protégé rhs pointent vers le même objet ; sinon, renvoie false.
[noexcept] template <typename X> bool operator==(const QPointer<T> &lhs, X *const &rhs)
Opérateur d'égalité. Renvoie true si rhs et le pointeur protégé lhs pointent vers le même objet ; sinon, renvoie false.
[noexcept(...)] template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)
Opérateur d'égalité. Renvoie true si les pointeurs protégés lhs et rhs pointent vers le même objet ; sinon, renvoie false.
Remarque : cette fonction est de type « noexcept » lorsque true est égal à true.
[noexcept] bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)
Opérateur d'égalité. Renvoie « true » si le pointeur protégé par « lhs » est « nullptr », sinon renvoie « false ».
[noexcept] bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)
Opérateur d'égalité. Renvoie « true » si le pointeur protégé par « rhs » est « nullptr », sinon renvoie « false ».
© 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.