QPointer Class
template <typename T> class QPointerQPointer クラスは、QObject へのガード付きポインタを提供するテンプレート・クラスです。さらに...
ヘッダー | #include <QPointer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
このクラスは等価比較可能です。
このクラスは, QPointer<X>, X*, および std::nullptr_t と等価比較可能です.
ここで X と T は互換型であり,(cv-qualifiers を除いて)同じであるか,あるいは一方が他方の基底型であることを意味します.
パブリック関数
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) |
詳しい説明
ガード付きポインタ QPointer<T> は,通常の C++ ポインタT *
のように振る舞います.ただし,参照オブジェクトが破棄されると自動的にクリアされます(通常の C++ ポインタとは異なり,このような場合は「ぶら下がりポインタ」になります).T
は,QObject のサブクラスでなければなりません.
ガード付きポインタは、他の人が所有するQObject へのポインタを格納する必要がある場合に便利です。ポインタの有効性を安全にテストすることができます。
Qt 5では、QPointerを使用する際の動作に若干の変更が加えられていることに注意してください。
- QPointerをQWidget (またはQWidget のサブクラス)で使用する場合、以前はQWidget のデストラクタによってQPointerがクリアされていました。現在、QPointer はQObject デストラクタによってクリアされます(これはQWeakPointer オブジェクトがクリアされるときであるため)。ウィジェットを追跡している QPointer は、QWidget デストラクタが追跡しているウィジェットの子を破棄する前にクリアされません。
Qt は、参照カウントされた共有ポインタオブジェクトの実装であるQSharedPointer も提供しており、個々のポインタへの参照のコレクションを保持するために使用できます。
例
例:QLabel がその間に削除された場合、label
変数には無効なアドレスの代わりにnullptr
が保持され、最後の行は決して実行されません。
QPointerで使用できる関数や演算子は、通常のガードされていないポインタで使用できるものと同じです。ただし、ポインタの算術演算子(+
,-
,++
,--
)は、通常オブジェクトの配列でのみ使用されます。
QPointersを通常のポインタと同じように使えば、このクラスのドキュメントを読む必要はありません。
ガードされたポインタを作成するには、T*または同じ型の別のガードされたポインタからポインタを作成したり、代入したりすることができます。operator==()やoperator!=()を使ってポインタ同士を比較したり、isNull()を使ってnullptr
。*x
、またはx->member
記法を使ってポインタを再参照することができます。
ガードされたポインタは自動的にT
* にキャストされるので、ガードされたポインタとガードされていないポインタを自由に混在させることができます。つまり、QPointer<QWidget>があれば、QWidget *を必要とする関数に渡すことができます。このような理由から、QPointerをパラメータとして受け取る関数を宣言することはあまり意味がありません。QPointerは、時間経過とともにポインタを保存する場合に使用してください。
クラスT
はQObject を継承しなければならない。
QSharedPointer 、QObject 、QObjectCleanupHandlerも参照のこと 。
メンバ関数ドキュメント
値nullptr
を持つガード付きポインタを構築する。
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)
変換コンストラクタ。other から移動またはコピーして新しいQPointer を構築する。
移動元のQPointer は nullptr にリセットされる。
注: これらのコンストラクタは、X*
がT*
に変換可能な場合にのみ、オーバーロード解決に参加します。
この関数は Qt 6.6 で導入されました。
QPointer::QPointer(T *p)
p が指すのと同じオブジェクトを指す、ガードされたポインタを構築する。
QPointer::~QPointer()
ガードされたポインタを破棄する。通常のポインタと同様に、ガードされたポインタを破棄しても、指されているオブジェクトは破棄されません。
[noexcept]
void QPointer::clear()
このQPointer オブジェクトをクリアする。
isNull()も参照 。
[noexcept]
T *QPointer::data() const
ガードされているオブジェクトへのポインタを返します。
[noexcept, since 6.0]
T *QPointer::get() const
data() と同じ。この関数は STL との互換性のために提供されています。
この関数は Qt 6.0 で導入されました。
[noexcept]
bool QPointer::isNull() const
参照オブジェクトが破壊されているか、参照オブジェクトがない場合はtrue
を返し、そうでない場合はfalse
を返す。
[noexcept]
void QPointer::swap(QPointer<T> &other)
このポインターをother と交換する。この操作は非常に高速で、失敗することはない。
[noexcept]
T *QPointer::operator T *() const
キャスト演算子。ポインタのセマンティクスを実装している。この関数のおかげで、QPointer<T>をT*が必要な関数に渡すことができる。
[noexcept]
T &QPointer::operator*() const
ポインタのセマンティクスを実装しています。この演算子は、通常のC++ポインタと同じように使用する。
[noexcept]
T *QPointer::operator->() const
オーバーロードされた矢印演算子で、ポインタのセマンティクスを実装しています。この演算子は、通常の C++ ポインタと同じように使用してください。
[noexcept, since 6.6.1]
template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(QPointer<X> &&other)
変換移動代入演算子。このガードされたポインタを、other によってガードされたのと同じオブジェクトをガードするようにし、other を nullptr にリセットする。
注意: この演算子は、X*
がT*
に変換可能な場合にのみ、オーバーロード解決に参加します。
この関数は Qt 6.6.1 で導入されました。
QPointer<T> &QPointer::operator=(T *p)
代入演算子。このガードされたポインターは、p が指すのと同じオブジェクトを指すようになる。
[noexcept, since 6.6]
template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(const QPointer<X> &other)
変換代入演算子。このガードされたポインタを、other によってガードされたのと同じオブジェクトをガードするようにする。
注意: この演算子は、X*
がT*
に変換可能な場合にのみ、オーバーロードの解決に参加します。
この関数は Qt 6.6 で導入されました。
関連する非会員
[noexcept]
template <typename X> bool operator!=(X *const &lhs, const QPointer<T> &rhs)
不等号演算子。lhs とガードされたポインタrhs が同じオブジェクトを指していなければtrue
を返し、そうでなければfalse
を返す。
[noexcept]
template <typename X> bool operator!=(const QPointer<T> &lhs, X *const &rhs)
不等号演算子。rhs とガードされたポインタlhs が同じオブジェクトを指していなければtrue
を返し、そうでなければfalse
を返す。
[noexcept(...)]
template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)
不等号演算子。ガードされたポインタlhs とrhs が同じオブジェクトを指していなければtrue
を返し、そうでなければfalse
を返す。
注: true
がtrue
のとき、この関数は noexcept となる。
[noexcept]
bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)
不等号演算子。lhs でガードされたポインタが有効な(つまりnullptr
ではない)ポインタであればtrue
を返し、そうでなければfalse
を返す。
[noexcept]
bool operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs)
不等号演算子。rhs でガードされたポインタが有効な(つまりnullptr
ではない)ポインタであればtrue
を返し、そうでなければfalse
を返す。
[noexcept]
template <typename X> bool operator==(X *const &lhs, const QPointer<T> &rhs)
等号演算子。lhs とガードされたポインタrhs が同じオブジェクトを指していればtrue
を返し、そうでなければfalse
を返す。
[noexcept]
template <typename X> bool operator==(const QPointer<T> &lhs, X *const &rhs)
等号演算子。rhs とガードされたポインタlhs が同じオブジェクトを指していればtrue
を返し、そうでなければfalse
を返す。
[noexcept(...)]
template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)
等号演算子。ガードされたポインタlhs とrhs が同じオブジェクトを指している場合はtrue
を返し、そうでない場合はfalse
を返す。
注: true
がtrue
の場合、この関数は noexcept となる。
[noexcept]
bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)
等号演算子。lhs でガードされたポインタがnullptr
であればtrue
を返し、そうでなければfalse
を返す。
[noexcept]
bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)
等号演算子。rhs でガードされたポインタがnullptr
であればtrue
を返し、そうでなければ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.