QPointer Class

template <typename T> class QPointer

QPointer クラスは、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 も提供しており、個々のポインタへの参照のコレクションを保持するために使用できます。

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

例:QLabel がその間に削除された場合、label 変数には無効なアドレスの代わりにnullptr が保持され、最後の行は決して実行されません。

QPointerで使用できる関数や演算子は、通常のガードされていないポインタで使用できるものと同じです。ただし、ポインタの算術演算子(+,-,++,-- )は、通常オブジェクトの配列でのみ使用されます。

QPointersを通常のポインタと同じように使えば、このクラスのドキュメントを読む必要はありません。

ガードされたポインタを作成するには、T*または同じ型の別のガードされたポインタからポインタを作成したり、代入したりすることができます。operator==()やoperator!=()を使ってポインタ同士を比較したり、isNull()を使ってnullptr*x 、またはx->member 記法を使ってポインタを再参照することができます。

ガードされたポインタは自動的にT * にキャストされるので、ガードされたポインタとガードされていないポインタを自由に混在させることができます。つまり、QPointer<QWidget>があれば、QWidget *を必要とする関数に渡すことができます。このような理由から、QPointerをパラメータとして受け取る関数を宣言することはあまり意味がありません。QPointerは、時間経過とともにポインタを保存する場合に使用してください。

クラスTQObject を継承しなければならない。

QSharedPointerQObjectQObjectCleanupHandlerも参照のこと

メンバ関数ドキュメント

[noexcept] QPointer::QPointer()

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

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)

不等号演算子。ガードされたポインタlhsrhs が同じオブジェクトを指していなければtrue を返し、そうでなければfalse を返す。

注: truetrue のとき、この関数は 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)

等号演算子。ガードされたポインタlhsrhs が同じオブジェクトを指している場合はtrue を返し、そうでない場合はfalse を返す。

注: truetrue の場合、この関数は 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.