Qt學習之parent參數

這是一篇很簡單的文章,僅僅是用來說明一下一個參數的作用,因此我把它寫成了tip,而不是接下來的17.

程序寫的多了,你會發現幾乎所有的Qt類的構造函數都會有一個parent參數。這個參數通常是QObject* 或者是 QWidget* 類型的。很多情況下它都會有一個初始值0,因此,即便你不去給它複製也沒有絲毫的問題。於是,稍微偷懶一下,就會不自覺的忽略了這個參數。那麼,這個參數到底是幹什麼用的呢?

其實,這個參數有很多用處。就像它的名字一樣,這個參數指定了組件的父組件。對於一個對話框來說,對話框一般是不作爲頂層容器出現的,因此在任務欄上一般是沒有對話框的位置的。怎麼指定這個對話框不是頂層容器呢?有父組件的組件不就不是頂層容器了嗎?因此,只要你指定對話框的parent屬性,任務欄就不會出現它的身影。當然,如果你不指定,這個對話框就成爲頂層容器了,任務欄會給它留個位置的——利用這個特性,就可以實現特殊對話框可以在任務欄出現的效果,比如“關於”對話框的出現。

另外比較通用,也是很重要的作用是,parent參數指明瞭組件的父組件,這樣,當父組件delete時,Qt可以保證所有子組件——也就是parent指針指向這個組件的所有組件——都會被正確的delete掉。這是Qt能夠幫助我們管理一部分內存的原因所在。Qt是通過遍歷parent屬性來防止了這一部分內存泄漏的。因此,必要情況下還是不要忘記設置這個parent屬性。當然,如果你不聲明這個屬性,當整個程序關閉時,操作系統會回收內存——因此我們所說的內存泄漏一般是指我們自己寫的應用程序的內部,而不會影響到整個操作系統——當然,如果你實現太可惡,操作系統也會受不了自動關掉你的程序的:-)


本文轉載自http://devbean.blog.51cto.com/448512/214166

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章