QPointer Class
template <typename T> class QPointerLa clase QPointer es una clase de plantilla que proporciona punteros protegidos a QObject. Más...
| Cabecera: | #include <QPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Esta clase es igual-comparable.
Esta clase es comparable con QPointer<X>, X*, y std::nullptr_t.
Donde X y T son tipos compatibles, lo que significa que o son iguales (excepto por sus calificadores cv), o uno es un tipo base del otro.
Funciones públicas
| 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) |
No miembros relacionados
| 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) |
Descripción detallada
Un puntero protegido, QPointer<T>, se comporta como un puntero C++ normal T *, excepto que se borra automáticamente cuando se destruye el objeto referenciado (a diferencia de los punteros C++ normales, que se convierten en "punteros colgantes" en tales casos). T debe ser una subclase de QObject.
Los punteros protegidos son útiles cuando se necesita almacenar un puntero a QObject que pertenece a otra persona y que, por lo tanto, puede ser destruido mientras se tiene una referencia a él. Puedes comprobar con seguridad la validez del puntero.
Tenga en cuenta que Qt 5 introduce un ligero cambio en el comportamiento cuando se utiliza QPointer.
- Cuando se usa QPointer en un QWidget (o una subclase de QWidget), anteriormente el QPointer era borrado por el destructor QWidget. Ahora, el QPointer es borrado por el destructor QObject (ya que es cuando los objetos QWeakPointer son borrados). Cualquier QPointer que rastree un widget NO será borrado antes de que el destructor QWidget destruya los hijos del widget que está siendo rastreado.
Qt también proporciona QSharedPointer, una implementación de un objeto puntero compartido con contador de referencias, que puede usarse para mantener una colección de referencias a un puntero individual.
Ejemplo:
Si QLabel se borra mientras tanto, la variable label contendrá nullptr en lugar de una dirección inválida, y la última línea nunca se ejecutará.
Las funciones y operadores disponibles con un QPointer son los mismos que los disponibles con un puntero normal no protegido, excepto los operadores aritméticos de puntero (+, -, ++, y --), que normalmente sólo se utilizan con matrices de objetos.
Use QPointers como punteros normales y no necesitará leer la documentación de esta clase.
Para crear punteros protegidos, puedes construirlos o asignarlos desde un T* o desde otro puntero protegido del mismo tipo. Puedes compararlos entre sí utilizando operator==() y operator!=(), o comprobar nullptr con isNull(). Se puede hacer referencia a ellos utilizando la notación *x o x->member.
Un puntero protegido se convertirá automáticamente en un T *, por lo que puedes mezclar libremente punteros protegidos y no protegidos. Esto significa que si tienes un QPointer<QWidget>, puedes pasarlo a una función que requiera un QWidget *. Por esta razón, es de poco valor declarar funciones para tomar un QPointer como parámetro; simplemente usa punteros normales. Utilice un QPointer cuando esté almacenando un puntero en el tiempo.
Tenga en cuenta que la clase T debe heredar de QObject, o se producirá un error de compilación o enlace.
Ver también QSharedPointer, QObject, y QObjectCleanupHandler.
Documentación de funciones miembro
Construye un puntero protegido con el valor nullptr.
Véase también 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)
Constructor de conversión. Construye un nuevo QPointer moviendo o copiando desde other.
El QPointer movido-desde se restablece a nullptr.
Nota: Estos constructores participan en la resolución de sobrecargas sólo si X* es convertible a T*.
Estas funciones se introdujeron en Qt 6.6.
QPointer::QPointer(T *p)
Construye un puntero protegido que apunta al mismo objeto que p.
QPointer::~QPointer()
Destruye el puntero protegido. Al igual que un puntero normal, la destrucción de un puntero protegido no destruye el objeto al que apunta.
[noexcept] void QPointer::clear()
Borra este objeto QPointer.
Véase también isNull().
[noexcept] T *QPointer::data() const
Devuelve el puntero al objeto custodiado.
[noexcept, since 6.0] T *QPointer::get() const
Igual que data(). Esta función se proporciona por compatibilidad con STL.
Esta función se introdujo en Qt 6.0.
[noexcept] bool QPointer::isNull() const
Devuelve true si el objeto referenciado ha sido destruido o si no hay objeto referenciado; en caso contrario devuelve false.
[noexcept] void QPointer::swap(QPointer<T> &other)
Intercambia este puntero con other. Esta operación es muy rápida y nunca falla.
[noexcept] QPointer::operator T *() const
Operador Cast; implementa la semántica de punteros. Debido a esta función puede pasar un QPointer<T> a una función donde se requiere un T *.
[noexcept] T &QPointer::operator*() const
Operador de desreferencia; implementa la semántica de puntero. Utilice este operador como lo haría con un puntero normal de C++.
[noexcept] T *QPointer::operator->() const
Operador de flecha sobrecargado; implementa la semántica de puntero. Utilice este operador como lo haría con un puntero normal de C++.
[noexcept, since 6.6.1] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(QPointer<X> &&other)
Operador de conversión movimiento-asignación. Hace que este puntero guardado guarde el mismo objeto guardado por other y restablece other a nullptr.
Restricciones
Participa en la resolución de sobrecarga sólo si X* es convertible a T*.
Esta función se introdujo en Qt 6.6.1.
QPointer<T> &QPointer::operator=(T *p)
Operador de asignación. Este puntero protegido apuntará ahora al mismo objeto al que apunta p.
[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(const QPointer<X> &other)
Operador de asignación de conversión. Hace que este puntero custodiado custodie el mismo objeto custodiado por other.
Restricciones
Participa en la resolución de sobrecargas sólo si X* es convertible a T*.
Esta función se introdujo en Qt 6.6.
No miembros relacionados
[noexcept] template <typename X> bool operator!=(X *const &lhs, const QPointer<T> &rhs)
Operador de desigualdad. Devuelve true si lhs y el puntero protegido rhs no apuntan al mismo objeto, en caso contrario devuelve false.
[noexcept] template <typename X> bool operator!=(const QPointer<T> &lhs, X *const &rhs)
Operador de desigualdad. Devuelve true si rhs y el puntero protegido lhs no apuntan al mismo objeto, en caso contrario devuelve false.
[noexcept(...)] template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)
Operador de desigualdad. Devuelve true si los punteros protegidos lhs y rhs no apuntan al mismo objeto, en caso contrario devuelve false.
Nota: Esta función es noexcept cuando true es true.
[noexcept] bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)
Operador de desigualdad. Devuelve true si el puntero protegido por lhs es un puntero válido (es decir, no nullptr), en caso contrario devuelve false.
[noexcept] bool operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs)
Operador de desigualdad. Devuelve true si el puntero protegido por rhs es un puntero válido (es decir, no nullptr), en caso contrario devuelve false.
[noexcept] template <typename X> bool operator==(X *const &lhs, const QPointer<T> &rhs)
Operador de igualdad. Devuelve true si lhs y el puntero protegido rhs apuntan al mismo objeto, en caso contrario devuelve false.
[noexcept] template <typename X> bool operator==(const QPointer<T> &lhs, X *const &rhs)
Operador de igualdad. Devuelve true si rhs y el puntero protegido lhs apuntan al mismo objeto, en caso contrario devuelve false.
[noexcept(...)] template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)
Operador de igualdad. Devuelve true si los punteros protegidos lhs y rhs apuntan al mismo objeto, en caso contrario devuelve false.
Nota: Esta función es noexcept cuando true es true.
[noexcept] bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)
Operador de igualdad. Devuelve true si el puntero custodiado por lhs es nullptr, en caso contrario devuelve false.
[noexcept] bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)
Operador de igualdad. Devuelve true si el puntero custodiado por rhs es nullptr, en caso contrario devuelve 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.