【QT編程】—— 揭秘MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)


  剛創建一個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++博大精深。

 


免責聲明!

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



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