日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

QT中的对象模型――QPointer

發布時間:2023/10/11 综合教程 120 老码农
生活随笔 收集整理的這篇文章主要介紹了 QT中的对象模型――QPointer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QPointer是一個模板類,為QObject對象提供了守衛指針(Guarded Pointer)。什么是守衛指針?守衛指針QPointer<T>類似于普通C++指針T *,有且僅有一點不同:當被引用的對象被刪除的時候,守衛指針自動設置為0,不像普通的C++指針將成為“野指針”。這里,T必須是QObject的子類。

什么時候使用守衛指針?當你需要維護一個別的類擁有的QObject對象的指針時,你需要使用守衛指針,因為你可以很容易的對該指針進行有效性判斷。

注意:相比于QT4,QT5中QPointer在行為上有了少許的變化:

當使用QPointer指向QWidget時,QT4中,QPointer將在QWidget的析構函數中清除,而在QT5中,QPointer將在QObject的析構函數中清除。

接下來上代碼:

    #include <QPointer>
    #include <QDebug>
    #include <QLabel>
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QLabel *pLabel = new QLabel();
        QPointer<QLabel> label = pLabel;
        label->setText("&Status:");
        qDebug() << "before = " << label;
        if (label)
           label->show();
        delete pLabel;
        qDebug() << "after = " << label;
    
        return a.exec();
    }

運行結果如下:

======================================================

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。

總結

以上是生活随笔為你收集整理的QT中的对象模型――QPointer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。