Sur cette page

QPointer Class

template <typename T> class QPointer

La classe QPointer est une classe modèle qui fournit des pointeurs gardés sur QObject. Plus...

En-tête : #include <QPointer>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Cette classe est comparable à l 'égalité.

Cette classe est comparable à QPointer<X>, X*, et std::nullptr_t.

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)
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 gardé, QPointer<T>, se comporte comme un pointeur C++ normal T *, sauf qu'il est automatiquement effacé lorsque l'objet référencé est détruit (contrairement aux pointeurs C++ normaux, qui deviennent des "pointeurs pendants" dans de tels cas). T doit être une sous-classe de QObject.

Les pointeurs gardés sont utiles lorsque vous devez stocker un pointeur sur un objet QObject qui appartient à quelqu'un d'autre et qui risque donc d'être détruit alors que vous détenez toujours une référence sur cet objet. Vous pouvez tester 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 QWidget (ou une sous-classe de QWidget), le QPointer était auparavant effacé par le destructeur de QWidget. Désormais, le QPointer est effacé par le destructeur QObject (puisque c'est à ce moment-là que les objets QWeakPointer sont effacés). Les QPointer qui suivent un widget ne seront PAS effacés avant que le destructeur QWidget ne détruise les enfants du widget suivi.

Qt XML fournit également QSharedPointer, une implémentation d'un objet pointeur partagé à comptage de références, qui peut être utilisé pour maintenir une collection de références à un pointeur individuel.

Exemple :

    QPointer<QLabel> label = new QLabel;
    label->setText("&Status:");
    ...
    if (label)
        label->show();

Si 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 les 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 arithmétiques de pointeur (+, -, ++, 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 gardés, vous pouvez les construire ou les assigner à partir d'un T* ou d'un autre pointeur gardé du même type. Vous pouvez les comparer entre eux en utilisant operator==() et operator!=(), ou tester nullptr avec isNull(). Vous pouvez les déréférencer en utilisant la notation *x ou x->member.

Un pointeur gardé sera automatiquement transformé en T *, de sorte que vous pouvez librement mélanger des pointeurs gardés et non gardés. Cela signifie que si vous avez un QPointer<QWidget>, vous pouvez le passer à une fonction qui nécessite un QWidget *. Pour cette raison, il est peu utile de déclarer des fonctions qui prennent un QPointer en paramètre ; il suffit d'utiliser des pointeurs normaux. Utilisez un QPointer lorsque vous stockez un pointeur dans le temps.

Notez que la classe T doit hériter de QObject, sous peine d'erreur de compilation ou de liaison.

Voir également QSharedPointer, QObject, et QObjectCleanupHandler.

Documentation sur les fonctions membres

[noexcept] QPointer::QPointer()

[constexpr noexcept] QPointer::QPointer(std::nullptr_t)

Construit un pointeur gardé avec la valeur nullptr.

Voir aussi isNull().

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer::QPointer(QPointer<X> &&other)

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer::QPointer(const QPointer<X> &other)

Constructeur de conversion. Construit un nouveau QPointer en déplaçant ou en copiant le other.

Le QPointer déplacé est réinitialisé à 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)

Construit un pointeur gardé qui pointe sur le même objet que p.

QPointer::~QPointer()

Détruit le pointeur surveillé. Tout comme un pointeur normal, la destruction d'un pointeur surveillé ne détruit pas l'objet pointé.

[noexcept] void QPointer::clear()

Efface cet objet QPointer.

Voir aussi isNull().

[noexcept] T *QPointer::data() const

Renvoie le pointeur sur l'objet gardé.

[noexcept, since 6.0] T *QPointer::get() const

Identique à data(). Cette fonction est fournie pour la compatibilité 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'y a pas d'objet référencé ; sinon, renvoie false.

[noexcept] void QPointer::swap(QPointer<T> &other)

Remplace ce pointeur par other. Cette opération est très rapide et n'échoue jamais.

[noexcept] QPointer::operator T *() const

Opérateur de fonte ; implémente la sémantique des pointeurs. Grâce à cette fonction, vous pouvez passer un 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++ normal.

[noexcept] T *QPointer::operator->() const

Opérateur de flèche surchargé ; implémente la sémantique du pointeur. Utilisez cet opérateur comme vous le feriez avec un pointeur C++ normal.

[noexcept, since 6.6.1] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(QPointer<X> &&other)

Opérateur d'affectation de déplacement de conversion. Fait de ce pointeur gardé le même objet que celui gardé par other et réinitialise other à nullptr.

Contraintes

Ne participe à la résolution de surcharge 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 surveillé pointera désormais sur le même objet que p.

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(const QPointer<X> &other)

Opérateur d'affectation de conversion. Fait de ce pointeur gardé le même objet que celui gardé par other.

Contraintes

Participe à la résolution de surcharge uniquement si X* est convertible en T*.

Cette fonction a été introduite dans Qt 6.6.

Non-membres apparenté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 gardé 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 gardé 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 gardés lhs et rhs ne pointent pas vers le même objet, sinon renvoie false.

Remarque : cette fonction est noexcept lorsque true est true.

[noexcept] bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)

Opérateur d'inégalité. Renvoie true si le pointeur gardé par lhs est un pointeur valide (c'est-à-dire pas 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 gardé par rhs est un pointeur valide (c'est-à-dire pas 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 gardé 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 gardé 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 gardés lhs et rhs pointent vers le même objet, sinon renvoie false.

Remarque : cette fonction est noexcept lorsque true est true.

[noexcept] bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)

Opérateur d'égalité. Renvoie true si le pointeur gardé 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 gardé 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.