[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がクリアされます.
次のコードを入力します.
    #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。