[QT入門編]2 QTにおけるオブジェクトモデル——Qpointer
Qpointerはテンプレートクラスで、QObjectオブジェクトにガードポインタ(Guarded Pointer)を提供します.守衛指針とは何ですか.ガードポインタQpointerは、通常のC++ポインタT*と似ており、参照されたオブジェクトが削除されると、ガードポインタは自動的に0に設定され、通常のC++ポインタとは異なり「野ポインタ」になります.ここで,TはQObjectのサブクラスでなければならない.
ガードポインタはいつ使いますか?個々のクラスが持つQObjectオブジェクトのポインタを維持する必要がある場合は、ポインタの有効性を容易に判断できるため、ガードポインタを使用する必要があります.
注意:QT 4に比べて、QT 5ではQpointerの動作に少し変化があります.
Qpointerを使用してQWidgetを指す場合、QT 4ではQWidgetの構造関数でQpointerがクリアされ、QT 5ではQObjectの構造関数でQpointerがクリアされます.
次のコードを入力します.
ガードポインタはいつ使いますか?個々のクラスが持つQObjectオブジェクトのポインタを維持する必要がある場合は、ポインタの有効性を容易に判断できるため、ガードポインタを使用する必要があります.
注意:QT 4に比べて、QT 5ではQpointerの動作に少し変化があります.
Qpointerを使用してQWidgetを指す場合、QT 4ではQWidgetの構造関数でQpointerがクリアされ、QT 5ではQObjectの構造関数でQpointerがクリアされます.
次のコードを入力します.
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *pLabel = new QLabel();
QPointer label = pLabel;
label->setText("&Status:");
qDebug() <show();
delete pLabel;
qDebug() <
:
======================================================
before= QLabel(0x152fd668)
setGeometry: Unableto set geometry 48x12+640+280 on QWidgetWindow/'QLabelClassW
indow'. Resultinggeometry: 116x12+640+280 (frame: 8, 30,8, 8, custom margin:
0, 0, 0, 0, minimumsize: 0x0, maximum size: 16777215x16777215).
after= QWidget(0x0)
======================================================
pLabel , label , QT label 。
Qt5.5 Qt5.6。