進行qt應用程式開發時,經常利用qt designer來進行圖形使用者介面的設計工作。利用它進行圖形介面的設計工作有著直觀、方面、易於後期維護的優點。在qt designer裡面做的所有工作,最終會儲存為乙個xml格式的ui檔案,該檔案儲存了很多視窗部件、布局等的位置和狀態資訊。而當我們開發乙個應用程式時面臨的問題便是我們如何使用這個ui檔案。對此qt提供了乙個使用者介面編譯器,該工具可以從這個xml格式的ui檔案生成乙個c++格式的.h標頭檔案。命令的使用方法是
uic -o 輸出檔名(.h檔案) 源檔名(.ui檔案)
習慣上生成的.h檔名為在源檔名的前面加上ui_字首,例如原始檔名為calculatorform.ui,則生成的.h檔名為ui_calculatorform.h,使用的命令如下:
uic -o ui_calculatorform.h calculatorform.ui
生成的標頭檔案中定義了兩個類,其中乙個的主要內容如下:
●指向各種widgets,layouts,layout items, button groups以及actions的指標
● 乙個稱為setupui()的成員函式用來在構建各種視窗部件和布局,完成初始化及訊號/槽的連線
●乙個稱為translateui()的成員函式來處理文字翻譯相關的工作。
另乙個類從該類簡單的公有繼承,只不過放在了乙個叫ui的命令空間中 ,例如:
class ui_calculatorform
public:
qpushbutton *pushbutton;
void setupui(qwidget *widget)
// setupui
void retranslateui(qwidget *widget)
// retranslateui
namespace ui ;
} // namespace ui
如何使用該類就是我們接下來要討論的主題。
有三種主要的方式
方法一:直接法
直接法需要在main.cpp中包含剛才uic所生成的.h標頭檔案。然後在main函式中我們建立乙個qwidget的物件及乙個該使用者介面類的物件,並呼叫類的setupui成員函式來使我們的qwidgt物件成為該介面物件的持有者
例如:#include "ui_calculatorform.h"
int main(int argc, char *argv)
qwidget *widget = new qwidget; //建立乙個qwidget物件
ui::calculatorform ui; //建立乙個該介面類的物件
ui.setupui(widget); //讓我們的qwidget物件成為該介面物件的placeholder
widget->show();
ui::calculatorform是ui_calculatorform.h中生成的類。
直接法簡單易用,但是實際中很少應用這種方法。因為我們通常需要designer中產生的部件之間有互動,且和應用程式的其餘**良好整合。然而這種方法不利於擴充套件。
方法二:單繼承法
這種方法要求我們從標準的視窗部件(例如qwidget或qdialog等)去繼承得到乙個子類。而在該子類中,包含乙個私有的使用者介面類物件。包含的方式又分為兩種:
一是直接包含乙個該類的物件來作為成員變數,例如:
#include "ui_calculatorform.h"
class calculatorform : public qwidget
q_object
public:
calculatorform(qwidget *parent = 0);
private:
ui::calculatorform ui; //直接包含乙個該類的物件來作為成員變數
對應的實現檔案需要建構函式中完成初始化,例如:
calculatorform::calculatorform(qwidget *parent) : qwidget(parent)
ui.setupui(this);
二是包含乙個指向該介面類物件的指標來作為成員變數,例如:
namespace ui {
class calculatorform;
class calculatorform : public qwidget
virtual ~calculatorform();
private:
ui::calculatorform *ui; //包含乙個指向該介面類物件的指標來作為成員變數
由於標頭檔案中只需用到指標,所以不需要完整的類定義,可以加快編譯的速度。
對應的實現檔案,應該像下面這樣來做
#include "ui_calculatorform.h"
calculatorform::calculatorform(qwidget *parent) :
qwidget(parent), ui(new ui::calculatorform)
ui->setupui(this);
calculatorform::~calculatorform()
delete ui;
這種方法是目前qt官方推薦的主要方法。
方法三:多繼承法
同時從標準的視窗部件基類(如qwidget)和uic生成的.h檔案中的使用者介面類(如ui::calculatorform)做多繼承,得到乙個子類。這種方法允許直接在子類中訪問預先定義好的視窗部件,而不需要加ui之類的字首。例如:
#include "ui_calculatorform.h"
class calculatorform : public qwidget, private ui::calculatorform
q_object
public:
calculatorform(qwidget *parent = 0);
private slots:
... //由於從ui::calculatorform直接繼承,所以可以直接用其中的視窗部件成員
這種方法因為用到了多繼承而顯得略為複雜,以前的qt版本中常採用此法,現在qt creator預設的已不使用這種方法了。
文章選自華清遠見嵌入式培訓
>>>更多優秀技術博文每日更新
Qt designer 工具使用
參考 建立了乙個login.ui檔案後按照該博文的方法在python中實現,如下,新增了自己學習的注釋 匯入程式執行必須模組 import sys pyqt5中使用的基本控制項都在pyqt5.qtwidgets模組中 匯入designer工具生成的login模組 from login import ...
使用Qt Designer建立介面
在部落格 在qt中使用c 建立介面 這是傳統的gui程式開發方式,只使用c c 既負責設計介面,也負責處理業務邏輯。介面是使用者能夠直接看到的,稱為 前端 業務邏輯的處理使用者看不到,在背後默默進行,稱為 後台 使用qt designer qt designer 是與 qt 配套的介面設計工具,使用...
使用Qt Designer進行布局
在使用form之前,需要將form上的物件放置到布局中。這確保在應用程式中預覽或使用form時,物件將正確顯示。在布局中放置物件還可以確保在調整窗體大小時它們也能正確調整大小。應用和打斷布局 管理物件的最簡單方法是對一組現有物件應用布局。通過選擇需要管理的物件並使用主工具欄 選單或上下文選單應用到標...