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