剛創建一個qt工程項目后,我被中間的一個文件給吸引住了目光。因為這個語法我沒看懂(這個繼承了QMain類之后出現的是什么東西。。。跟隨的初始化列表ui(new Ui :: MainWindow)初始化的是什么),帶着刨根問底的心思我對它展開了分析。下面貼圖:
首先來拆解 ui(new Ui :: MainWindow)這個語法:
ui 是一個在mainwindow頭文件中已經提前聲明的一個對象指針,因為這個類型是來自不同域的同名類型,所以在前面加了域解析
那么顯而易見回到前面的程序中new Ui :: MainWindow就是在對 ui 這個指針進行初始化
那么這里聲明的namespace Ui中的類型體又在何處呢?我們查找聲明一下
原理有個隱藏的頭文件。。。。那么事情就一下明朗了,我來簡單解讀一下:
在程序入口處先聲明了Ui這個域下的類型,並聲明了該類型的指針
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
↓
而后在隱藏的頭文件中實現了Ui_MainWindow這個類型並派生了Ui::MainWindow
↓
最后在程序入口頭文件對應的cpp文件中的繼承之后,使用初始化列表對指針進行初始化
解讀完畢,感嘆C++博大精深。