QPointer 类是提供守卫指针的模板类,指向 QObject . 更多...
| 头: | #include <QPointer> |
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| QPointer () | |
| QPointer (T * p ) | |
| ~QPointer () | |
| void | clear () |
| T * | data () const |
| T * | get () const |
| bool | isNull () const |
| void | swap (QPointer<T> & other ) |
| T * | operator T * () const |
| T & | operator* () const |
| T * | operator-> () const |
| QPointer<T> & | operator= (T * p ) |
| bool | operator!= (const QPointer<T> & p1 , const QPointer<X> & p2 ) |
| bool | operator!= (const QPointer<T> & p , X * o ) |
| bool | operator!= (X * o , const QPointer<T> & p ) |
| bool | operator!= (const QPointer<T> & lhs , std::nullptr_t) |
| bool | operator!= (std::nullptr_t, const QPointer<T> & rhs ) |
| bool | operator== (const QPointer<T> & p1 , const QPointer<X> & p2 ) |
| bool | operator== (const QPointer<T> & p , X * o ) |
| bool | operator== (X * o , const QPointer<T> & p ) |
| bool | operator== (const QPointer<T> & lhs , std::nullptr_t) |
| bool | operator== (std::nullptr_t, const QPointer<T> & rhs ) |
守卫指针 QPointer<T>,行为像正常 C++ 指针
T *
,除了它会被自动清零,当销毁引用对象时 (不像正常 C++ 指针,在这种情况下,会变成 "悬空指针")。
T
必须是子类化的
QObject
.
守卫指针很有用,每当需要存储的指针指向 QObject 由他人拥有,因此仍然可能在保持其引用时被销毁。可以安全地测试,指针的有效性。
注意,Qt 5 引入了轻微的行为变化,当使用 QPointer 时。
Qt 还提供 QSharedPointer ,计数引用共享指针对象的实现,可以用于维护单个指针的引用集合。
范例:
QPointer<QLabel> label = new QLabel;
label->setText("&Status:");
...
if (label)
label->show();
若
QLabel
被同时删除,
label
变量将保持
nullptr
而不是无效地址,且从不会执行最后一行。
The functions and operators available with a QPointer are the same as those available with a normal unguarded pointer, except the pointer arithmetic operators (
+
,
-
,
++
,和
--
), which are normally used only with arrays of objects.
使用 QPointer 像正常指针,且不需要阅读此类文档编制。
For creating guarded pointers, you can construct or assign to them from a T* or from another guarded pointer of the same type. You can compare them with each other using operator==() and operator!=(), or test for
nullptr
with
isNull
(). You can dereference them using either the
*x
或
x->member
表示法。
守卫指针将自动铸造成
T
*, so you can freely mix guarded and unguarded pointers. This means that if you have a QPointer<
QWidget
>, you can pass it to a function that requires a
QWidget
*. For this reason, it is of little value to declare functions to take a QPointer as a parameter; just use normal pointers. Use a QPointer when you are storing a pointer over time.
注意,类
T
必须继承
QObject
,否则会导致编译 (或链接) 错误。
另请参阅 QSharedPointer , QObject ,和 QObjectCleanupHandler .
构造守卫指针采用值
nullptr
.
另请参阅 isNull ().
构造守卫指针指向同一对象 p 所指向。
销毁守卫指针。就像正常指针,销毁守卫指针 not 销毁所指向的对象。
清零此 QPointer 对象。
另请参阅 isNull ().
返回指向被守卫对象的指针。
[since 6.0]
T
*QPointer::
get
() const
如同 data ()。此函数为兼容 STL (标准模板库) 提供。
该函数在 Qt 6.0 引入。
返回
true
if the referenced object has been destroyed or if there is no referenced object; otherwise returns
false
.
交换内容对于此 QPointer 采用内容源于 other 。此操作非常快且从不失败。
Cast operator; implements pointer semantics. Because of this function you can pass a QPointer <T> to a function where a T* is required.
Dereference operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.
Overloaded arrow operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.
赋值运算符。此守卫指针现在将指向同一对象 p 所指向。
不相等操作符。返回
true
若守卫指针
p1
and
p2
未指向同一对象,否则返回
false
.
不相等操作符。返回
true
if
o
和守卫指针
p
未指向同一对象,否则返回
false
.
不相等操作符。返回
true
if
o
和守卫指针
p
未指向同一对象,否则返回
false
.
不相等操作符。返回
true
if the pointer guarded by
lhs
is a valid (ie not
nullptr
) pointer, otherwise returns
false
.
不相等操作符。返回
true
if the pointer guarded by
rhs
is a valid (ie not
nullptr
) pointer, otherwise returns
false
.
相等运算符。返回
true
若守卫指针
p1
and
p2
指向同一对象,否则返回
false
.
相等运算符。返回
true
if
o
和守卫指针
p
指向同一对象,否则返回
false
.
相等运算符。返回
true
if
o
和守卫指针
p
指向同一对象,否则返回
false
.
相等运算符。返回
true
if the pointer guarded by
lhs
is
nullptr
,否则返回
false
.
相等运算符。返回
true
if the pointer guarded by
rhs
is
nullptr
,否则返回
false
.