天天看點

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

通過​​《Qt Creator的使用》​​的學習,我們可以借助 Designer(界面設計器)快速設計界面。

此例子 ui 内容如下(隻是簡單添加了一個按鈕):

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

工程的代碼目錄結構如下:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

最終在工程所在目錄會生成一個 ui 檔案:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

此 ui 檔案實際上是​​xml​​ 檔案:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

當我們編譯 Qt 程式代碼,Qt Creator 用 uic 工具把 ui 檔案的内容轉換成 C++ 代碼,在工程目錄同一級目錄的 build- 目錄下自動生成 ui_類名.h 檔案,如本例子中的 ui_mywidget.h,是由 mywidget.ui 利用uic 工具轉換而成,隻要通過Designer 修改了圖形界面裡的内容,ui_mywidget.h 也會跟着自動同步更新内容,ui_mywidget.h 是自動生成,使用者寫代碼時可以不用關心其實作過程:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

接下來我們一起分析一下此 ui_mywidget.h 和 Qt 程式代碼如何關聯起來(即 ui 檔案和 Qt 代碼關系)。

mywidget.h 中自動多了一個命名空間的聲明,類中多了 ui 指針對象成員:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

mywidget.h 對應的 mywidget.cpp 實作過程如下:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

接下來,我們一起看看 ui_mywidget.h 的實作過程:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系
Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

通過這樣的一步步分析,我們發現 Designer(界面設計器)設計 ui 界面最終轉換為 C++ 代碼(ui_類名.h),和我們寫的 Qt 代碼是大同小異的,也就是說代碼才是王道,Designer(界面設計器)隻是輔助我們快速設計界面,沒有它,我們同樣可以寫 Qt 程式。假如我們對某些部件操作不熟悉,不知道該如何用其相應函數,這時候我們通過 Designer(界面設計器)本身就是學習 Qt 的好老師。

那我們如何通過代碼修改 ui 檔案部件的屬性呢?

在設計模式下,每個部件在“QObject”中都有一個“objectName”(對象名字)的屬性:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

“objectName”(對象名字)的屬性的值(如此例子中的值“pushButton”),此值則為“ui_類名.h”中自動建立的對象指針名:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

是以,我們在 .cpp 檔案某函數中,可以通過“ ui-> ”引用此成員,在 Qt Creator 中,“.(點)”鍵比較智能,如果操作的是普通對象,則為“.(點)”,如果是對象指向,自動變為“->”,而且提示可以引用的成員:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

這裡,通過代碼修改 pushButton 的内容:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系

編譯運作程式後,按鈕的内容确實被修改:

Qt入門學習——Qt Creator 中 ui 檔案和 Qt 代碼關系