QPointer Class

template <typename T> class QPointer

Die Klasse QPointer ist eine Vorlagenklasse, die geschützte Zeiger auf QObject bereitstellt. Mehr...

Kopfzeile: #include <QPointer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Diese Klasse ist gleichheitsvergleichbar.

Diese Klasse ist gleichsetzbar mit QPointer<X>, X* und std::nullptr_t.

Wobei X und T kompatible Typen sind, was bedeutet, dass sie entweder gleich sind (mit Ausnahme ihrer cv-Qualifier), oder einer ein Basistyp des anderen ist.

Öffentliche Funktionen

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)
T *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)

Detaillierte Beschreibung

Ein geschützter Zeiger, QPointer<T>, verhält sich wie ein normaler C++-Zeiger T *, außer dass er automatisch gelöscht wird, wenn das referenzierte Objekt zerstört wird (im Gegensatz zu normalen C++-Zeigern, die in solchen Fällen zu "baumelnden Zeigern" werden). T muss eine Unterklasse von QObject sein.

Guarded Pointer sind immer dann nützlich, wenn Sie einen Zeiger auf ein QObject speichern müssen, das jemand anderem gehört und daher zerstört werden könnte, während Sie noch einen Verweis darauf halten. Sie können den Zeiger sicher auf seine Gültigkeit testen.

Beachten Sie, dass Qt 5 eine leichte Änderung im Verhalten bei der Verwendung von QPointer einführt.

  • Bei der Verwendung von QPointer auf QWidget (oder einer Unterklasse von QWidget) wurde der QPointer bisher durch den Destruktor von QWidget gelöscht. Jetzt wird der QPointer durch den QObject destructor gelöscht (da dies der Fall ist, wenn QWeakPointer Objekte gelöscht werden). Alle QPointer, die ein Widget verfolgen, werden NICHT gelöscht, bevor der QWidget Destruktor die Kinder des verfolgten Widgets vernichtet.

Qt bietet auch QSharedPointer, eine Implementierung eines referenzgezählten Shared-Pointer-Objekts, das verwendet werden kann, um eine Sammlung von Referenzen auf einen individuellen Zeiger zu verwalten.

Beispiel:

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

Wenn QLabel in der Zwischenzeit gelöscht wird, enthält die Variable label nullptr anstelle einer ungültigen Adresse, und die letzte Zeile wird nie ausgeführt.

Die Funktionen und Operatoren, die mit einem QPointer zur Verfügung stehen, sind die gleichen wie die, die mit einem normalen ungeschützten Zeiger zur Verfügung stehen, mit Ausnahme der arithmetischen Zeigeroperatoren (+, -, ++ und --), die normalerweise nur mit Arrays von Objekten verwendet werden.

Verwenden Sie QPointers wie normale Zeiger und Sie brauchen diese Klassendokumentation nicht zu lesen.

Um Guarded Pointer zu erstellen, können Sie sie aus einem T* oder einem anderen Guarded Pointer desselben Typs konstruieren oder zuweisen. Sie können sie mit operator==() und operator!=() miteinander vergleichen oder mit isNull() auf nullptr testen. Sie können sie entweder mit der *x oder der x->member Notation dereferenzieren.

Ein bewachter Zeiger wird automatisch in einen T * umgewandelt, so dass Sie bewachte und unbewachte Zeiger frei mischen können. Das bedeutet, dass Sie einen QPointer<QWidget> an eine Funktion übergeben können, die einen QWidget * benötigt. Aus diesem Grund ist es wenig sinnvoll, Funktionen so zu deklarieren, dass sie einen QPointer als Parameter annehmen; verwenden Sie einfach normale Zeiger. Verwenden Sie einen QPointer, wenn Sie einen Zeiger über einen längeren Zeitraum speichern wollen.

Beachten Sie, dass die Klasse T von QObject erben muss, da sonst ein Kompilierungs- oder Verknüpfungsfehler auftritt.

Siehe auch QSharedPointer, QObject, und QObjectCleanupHandler.

Dokumentation der Mitgliedsfunktionen

[noexcept] QPointer::QPointer()

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

Konstruiert einen geschützten Zeiger mit dem Wert nullptr.

Siehe auch 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)

Konvertierungskonstruktor. Konstruiert ein neues QPointer durch Verschieben oder Kopieren von other.

Der verschobene QPointer wird auf nullptr zurückgesetzt.

Hinweis: Diese Konstruktoren nehmen nur an der Überladungsauflösung teil, wenn X* in T* konvertierbar ist.

Diese Funktion wurde in Qt 6.6 eingeführt.

QPointer::QPointer(T *p)

Konstruiert einen geschützten Zeiger, der auf das gleiche Objekt zeigt, auf das auch p zeigt.

QPointer::~QPointer()

Zerstört den geschützten Zeiger. Genau wie ein normaler Zeiger zerstört das Zerstören eines Guarded Pointers nicht das Objekt, auf das er zeigt.

[noexcept] void QPointer::clear()

Löscht dieses QPointer Objekt.

Siehe auch isNull().

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

Gibt den Zeiger auf das zu bewachende Objekt zurück.

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

Dasselbe wie data(). Diese Funktion wird aus Gründen der STL-Kompatibilität bereitgestellt.

Diese Funktion wurde in Qt 6.0 eingeführt.

[noexcept] bool QPointer::isNull() const

Gibt true zurück, wenn das referenzierte Objekt zerstört wurde oder wenn es kein referenziertes Objekt gibt; andernfalls wird false zurückgegeben.

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

Tauscht diesen Zeiger mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.

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

Cast-Operator; implementiert Zeiger-Semantik. Dank dieser Funktion können Sie ein QPointer<T> an eine Funktion übergeben, für die ein T* erforderlich ist.

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

Dereferenzierungsoperator; implementiert die Zeigersemantik. Verwenden Sie diesen Operator einfach wie einen normalen C++-Zeiger.

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

Überladener Pfeiloperator; implementiert Zeigersemantik. Verwenden Sie diesen Operator einfach wie einen normalen C++-Zeiger.

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

Operator für die Umwandlung von Zuweisungen. Macht diesen bewachten Zeiger zu demselben Objekt, das von other bewacht wird, und setzt other auf nullptr zurück.

Hinweis: Dieser Operator nimmt nur an der Überlastauflösung teil, wenn X* in T* konvertierbar ist.

Diese Funktion wurde in Qt 6.6.1 eingeführt.

QPointer<T> &QPointer::operator=(T *p)

Zuweisungsoperator. Dieser geschützte Zeiger zeigt nun auf das gleiche Objekt, auf das p zeigt.

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

Umwandlungszuweisungsoperator. Macht diesen bewachten Zeiger zu demselben Objekt, das von other bewacht wird.

Hinweis: Dieser Operator nimmt nur dann an der Überlastauflösung teil, wenn X* in T* konvertierbar ist.

Diese Funktion wurde in Qt 6.6 eingeführt.

Verwandte Nicht-Mitglieder

[noexcept] template <typename X> bool operator!=(X *const &lhs, const QPointer<T> &rhs)

Ungleichheitsoperator. Gibt true zurück, wenn lhs und der geschützte Zeiger rhs nicht auf dasselbe Objekt zeigen, andernfalls false.

[noexcept] template <typename X> bool operator!=(const QPointer<T> &lhs, X *const &rhs)

Ungleichheitsoperator. Gibt true zurück, wenn rhs und der geschützte Zeiger lhs nicht auf dasselbe Objekt zeigen, andernfalls false.

[noexcept(...)] template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)

Ungleichheitsoperator. Gibt true zurück, wenn die bewachten Zeiger lhs und rhs nicht auf dasselbe Objekt zeigen, andernfalls false.

Hinweis: Diese Funktion ist noexcept, wenn true true ist.

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

Ungleichheitsoperator. Gibt true zurück, wenn der durch lhs geschützte Zeiger ein gültiger Zeiger ist (d. h. nicht nullptr), andernfalls false.

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

Ungleichheitsoperator. Gibt true zurück, wenn der durch rhs geschützte Zeiger ein gültiger Zeiger ist (d. h. nicht nullptr), andernfalls false.

[noexcept] template <typename X> bool operator==(X *const &lhs, const QPointer<T> &rhs)

Gleichheitsoperator. Gibt true zurück, wenn lhs und der geschützte Zeiger rhs auf das gleiche Objekt zeigen, andernfalls false.

[noexcept] template <typename X> bool operator==(const QPointer<T> &lhs, X *const &rhs)

Gleichheitsoperator. Gibt true zurück, wenn rhs und der geschützte Zeiger lhs auf das gleiche Objekt zeigen, andernfalls false.

[noexcept(...)] template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)

Gleichheitsoperator. Gibt true zurück, wenn die bewachten Zeiger lhs und rhs auf dasselbe Objekt zeigen, andernfalls false.

Hinweis: Diese Funktion ist noexcept, wenn true true ist.

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

Gleichheitsoperator. Gibt true zurück, wenn der von lhs bewachte Zeiger nullptr ist, andernfalls false.

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

Gleichheitsoperator. Gibt true zurück, wenn der von rhs bewachte Zeiger nullptr ist, andernfalls false.

© 2025 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.