Qt ------ 初始化構造函數參數,parent


 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui->setupUi(this);
}

1、QMainWindow 是 MainWindow 的父類

2、QWidget *parent 中的 parent 值賦值給 QMainWindow(parent) 中的 parent,這其實是用到C++的語法,執行MainWindow的構造函數前先執行父類QMainWindow的構造函數

3、寫這句 QMainWindow(parent) 的原因是 new 一個 MainWindow 對象可以指定父對象,從而使用 Qt 提供的內存自動回收機制

4、QWidget  *parent 中為 QWidget 的原因是 QWidget 為窗口類型的類的基類,對於其他父類(比如非QMainWindow,即非窗口類),parent類型是 QObject

5、ui(new Ui::MainWindow)的作用相當於 ui = new Ui::MainWindow,即對對象 ui 進行實例化

 

 

幾乎所有的Qt類的構造函數都會有一個parent參數。這個參數通常是QObject* 或者是 QWidget* 類型的。很多情況下它都會有一個初始值0,因此,即便你不去給它復制也沒有絲毫的問題。於是,稍微偷懶一下,就會不自覺的忽略了這個參數。那么,這個參數到底是干什么用的呢?
 
其實,這個參數有很多用處。就像它的名字一樣,這個參數指定了組件的父組件。對於一個對話框來說,對話框一般是不作為 頂層容器出現的,因此在任務欄上一般是沒有對話框的位置的。怎么指定這個對話框不是頂層容器呢?有父組件的組件不就不是頂層容器了嗎?因此,只要你指定對話框的parent屬性,任務欄就不會出現它的身影。當然,如果你不指定,這個對話框就成為頂層容器了,任務欄會給它留個位置的——利用這個特性,就可以實現特殊對話框可以在任務欄出現的效果,比如“關於”對話框的出現。
 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM