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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt / 对象树

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt / 对象树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是對象樹?

我們常常聽到 QObject 會用對象樹來組織管理自己,那什么是對象樹?

這個概念非常好理解。因為 QObject 類就有一個私有變量 QList<QObject *>,專門存儲這個類的子孫后代們。比如創建一個 QObject 并指定父對象時,就會把自己加入到父對象的 childre() 列表中,也就是 QList<QObject *> 變量中。

二、使用對象樹模式有什么好處?

好處就是:當父對象被析構時子對象也會被析構。

舉個例子,有一個窗口 Window,里面有 Label 標簽、TextEdit 文本輸入框、Button 按鈕這三個元素,并且都設置 Window 為它們的父對象。這時候我做了一個關閉窗口的操作,作為程序員的你是不是自然想到將所有和窗口相關的對象析構啊?古老的辦法就是一個個手動 delete 唄。是不是很麻煩?Qt 運用對象樹模式,當父對象被析構時,子對象自動就 delete 掉了,不用再寫一大堆的代碼了。

所以,對象樹在 GUI 編程中是非常非常有用的。

三、注意構建 / 析構?QObject 的順序問題

正常情況下,最后被創建出來的會先被析構掉。就好比我有一個大桌子,上面先擺放一個盤子,再擺放一個碗。當我要把桌子撤掉的時候,會先撤掉碗,再撤掉盤子,最后撤掉桌子。

用代碼來演示一下:

正常情況

int main() {QWidget window;QPushButton quit("Quit", &window); }

后創建的 quit 對象指定了 window 為其父對象。那么關閉程序時,會先調用它的析構函數,然后調用 window 的析構函數。

一個特殊情況

int main() {QPushButton quit("Quit");QWidget window;quit.setParent(&window); }

如果反過來,由于 window 后創建,程序關閉時先調用 window 的析構函數(此時 quit 被第一次析構)。接著調用 quit 的析構函數(此時 quit 被第二次析構),這時由于被兩次析構,所以出問題了。

這種特殊情況在編程中很隱蔽,不容易發現。因為編譯的時候不會報錯,只有運行時才會產生問題。所以我們要保持良好的編程習慣以及對事物產生順序有科學的認知。

?

轉載于:https://www.cnblogs.com/bruce1992/p/14253493.html?share_token=988c4e36-f48a-4e00-9c72-4c7d5c5a6684

?

(SAW:Game Over!)

總結

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

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