QPointer Class
template <typename T> class QPointerDie Klasse „QPointer“ ist eine Template-Klasse, die geschützte Zeiger auf „ QObject “ bereitstellt. Mehr...
| Header: | #include <QPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Vergleiche mit QPointer
| Kategorie | Vergleichbare Typen | Beschreibung |
|---|---|---|
| Gleichheit | QPointer | |
| Gleichheit | QPointer<X>, X* und std::nullptr_t. | Dabei sind X und T kompatible Typen, d. h., sie sind entweder identisch (abgesehen von ihren cv-Qualifizierern) oder der eine ist ein Basistyp des anderen. |
Ö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) |
| 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) |
Verwandte Nicht-Mitglieder
| 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) |
Ausführliche Beschreibung
Ein geschützter Zeiger, QPointer<T>, verhält sich wie ein normaler C++-Zeiger T *, mit dem Unterschied, 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 „dangling pointers“ werden). Der Template-Parameter ` T ` gibt den von ` QObject` abgeleiteten Typ an, auf den verwiesen wird; ` T ` muss eine Unterklasse von ` QObject` sein.
Geschützte Zeiger sind immer dann nützlich, wenn Sie einen Zeiger auf ein ` QObject ` speichern müssen, das einem anderen Objekt gehört und daher möglicherweise zerstört wird, während Sie noch eine Referenz darauf halten. Sie können den Zeiger sicher auf Gültigkeit prüfen.
Beachten Sie, dass Qt 5 eine geringfügige Änderung im Verhalten bei der Verwendung von QPointer einführt.
- Bei der Verwendung von `QPointer` für ein ` QWidget ` (oder eine Unterklasse von ` QWidget`) wurde der `QPointer` bisher durch den Destruktor von ` QWidget ` gelöscht. Nun wird der `QPointer` durch den Destruktor von ` QObject ` gelöscht (da zu diesem Zeitpunkt die ` QWeakPointer `-Objekte gelöscht werden). Alle QPointer, die ein Widget verfolgen, werden NICHT gelöscht, bevor der Destruktor von ` QWidget ` die untergeordneten Elemente des verfolgten Widgets zerstört.
Qt stellt außerdem ` QSharedPointer` zur Verfügung, eine Implementierung eines referenzgezählten Shared-Pointer-Objekts, das verwendet werden kann, um eine Sammlung von Verweisen auf einen einzelnen Zeiger zu verwalten.
Beispiel:
Wird der ` QLabel ` in der Zwischenzeit gelöscht, enthält die Variable ` label ` ` nullptr ` anstelle einer ungültigen Adresse, und die letzte Zeile wird niemals ausgeführt.
Die für einen QPointer verfügbaren Funktionen und Operatoren entsprechen denen eines normalen, ungeschützten Zeigers, mit Ausnahme der Zeigerarithmetikoperatoren (+, -, ++ und --), die normalerweise nur bei Arrays von Objekten verwendet werden.
Verwenden Sie QPointers wie normale Zeiger, dann müssen Sie diese Klassendokumentation nicht lesen.
Um geschützte Zeiger zu erstellen, können Sie diese aus einem T* oder aus einem anderen geschützten Zeiger desselben Typs konstruieren oder ihnen einen Wert zuweisen. Sie können sie mithilfe der Operatoren ==() und !=() miteinander vergleichen oder mit isNull() prüfen, ob sie auf nullptr stehen. Sie können sie entweder mit der Notation *x oder x->member dereferenzieren.
Ein geschützter Zeiger wird automatisch in einen ` T *` umgewandelt, sodass Sie geschützte und ungeschützte Zeiger beliebig miteinander kombinieren können. Das bedeutet: Wenn Sie einen `QPointer<QWidget>` haben, können Sie diesen an eine Funktion übergeben, die einen ` QWidget *` benötigt. Aus diesem Grund ist es wenig sinnvoll, Funktionen zu deklarieren, die einen `QPointer` als Parameter erwarten; verwenden Sie stattdessen einfach normale Zeiger. Verwenden Sie einen `QPointer`, wenn Sie einen Zeiger über einen längeren Zeitraum hinweg speichern möchten.
Beachten Sie, dass die Klasse „ T “ von „ QObject “ erben muss, da es sonst zu einem Kompilierungs- oder Verknüpfungsfehler kommt.
Siehe auch „ QSharedPointer “, „ QObject “ und „ QObjectCleanupHandler “.
Dokumentation zu Mitgliedsfunktionen
[noexcept default] QPointer::QPointer()
[constexpr noexcept] QPointer::QPointer(std::nullptr_t)
Erstellt einen geschützten Zeiger mit dem Wert „ nullptr “.
Siehe auch ` 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)
Konvertierungskonstruktor. Erstellt ein neues ` QPointer ` durch Verschieben oder Kopieren von ` other`.
Der QPointer, aus dem die Daten verschoben wurden, wird auf `nullptr` zurückgesetzt.
Hinweis: Diese Konstruktoren nehmen nur dann an der Überladungsauflösung teil, wenn „ X* “ in „ T* “ konvertierbar ist.
Diese Funktionen wurden in Qt 6.6 eingeführt.
QPointer::QPointer(T *p)
Erstellt einen geschützten Zeiger, der auf dasselbe Objekt verweist wie „ p “.
QPointer::~QPointer()
Löscht den geschützten Zeiger. Genau wie bei einem normalen Zeiger wird durch das Löschen eines geschützten Zeigers das Objekt, auf das er verweist, nicht gelöscht.
[noexcept] void QPointer::clear()
Löscht dieses „ QPointer “-Objekt.
Siehe auch isNull().
[noexcept] T *QPointer::data() const
Gibt den Zeiger auf das geschützte Objekt zurück.
[noexcept, since 6.0] T *QPointer::get() const
Entspricht ` 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 kein referenziertes Objekt vorhanden ist; 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 niemals fehl.
[noexcept] QPointer::operator T *() const
Cast-Operator; implementiert die Zeigersemantik. Dank dieser Funktion können Sie ein ` QPointer<T>` an eine Funktion übergeben, die ein `T*` erwartet.
[noexcept] T &QPointer::operator*() const
Dereferenzierungsoperator; implementiert die Zeiger-Semantik. Verwenden Sie diesen Operator einfach so, wie Sie es bei einem normalen C++-Zeiger tun würden.
[noexcept] T *QPointer::operator->() const
Überladener Pfeiloperator; implementiert Zeigersemantik. Verwenden Sie diesen Operator einfach so, wie Sie es bei einem normalen C++-Zeiger tun würden.
[noexcept, since 6.6.1] template <typename X> requires if_convertible<X> QPointer<T> &QPointer::operator=(QPointer<X> &&other)
Konvertierungsoperator für die Zuweisung einer Variablen. Bewirkt, dass dieser geschützte Zeiger dasselbe Objekt schützt, das auch von ` other ` geschützt wird, und setzt ` other ` auf `nullptr` zurück.
Einschränkungen
Nimmt nur dann an der Überladungsauflö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 dasselbe Objekt, auf das auch „ p “ zeigt.
[noexcept, since 6.6] template <typename X> requires if_convertible<X> QPointer<T> &QPointer::operator=(const QPointer<X> &other)
Konvertierungszuweisungsoperator. Bewirkt, dass dieser geschützte Zeiger dasselbe Objekt schützt, das auch von ` other` geschützt wird.
Einschränkungen
Nimmt nur dann an der Überladungsauflö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 verweisen; andernfalls wird „ false “ zurückgegeben.
[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 verweisen; andernfalls wird „ false “ zurückgegeben.
[noexcept(...)] template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)
Ungleichheitsoperator. Gibt „ true “ zurück, wenn die geschützten Zeiger „ lhs “ und „ rhs “ nicht auf dasselbe Objekt verweisen; andernfalls wird „ false “ zurückgegeben.
Hinweis: Diese Funktion ist „noexcept“, wenn true gleich 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 (d. h. kein „ nullptr “) Zeiger ist; andernfalls wird „ false “ zurückgegeben.
[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 (d. h. kein „ nullptr “) Zeiger ist; andernfalls wird „ false “ zurückgegeben.
[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 dasselbe Objekt verweisen; andernfalls wird „ false “ zurückgegeben.
[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 dasselbe Objekt verweisen; andernfalls wird „ false “ zurückgegeben.
[noexcept(...)] template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)
Gleichheitsoperator. Gibt „ true “ zurück, wenn die geschützten Zeiger „ lhs “ und „ rhs “ auf dasselbe Objekt verweisen; andernfalls wird „ false “ zurückgegeben.
Hinweis: Diese Funktion ist „noexcept“, wenn true gleich true ist.
[noexcept] bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)
Gleichheitsoperator. Gibt „ true “ zurück, wenn der durch „ lhs “ geschützte Zeiger auf „ nullptr “ verweist; andernfalls wird „ false “ zurückgegeben.
[noexcept] bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)
Gleichheitsoperator. Gibt „ true “ zurück, wenn der durch „ rhs “ geschützte Zeiger auf „ nullptr “ verweist; andernfalls wird „ false “ zurückgegeben.
© 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.