您好,登錄后才能下訂單哦!
網頁版課程源碼 提取碼:1uy7
前幾天,在使用Qt編程時,為項目增加了幾個ui文件。偶然看一下源代碼目錄,發現源代碼目錄下的臨時文件和臨時目錄太多了,簡直雜亂不堪,雖然我們的代碼是通過svn管理的,提交時有過濾設置,這些臨時文件不會被入庫,但是有時候需要備份一下源代碼目錄并打包,如果帶著這么多臨時文件(文件尺寸還是非常大的),那可太不方便了。所以今天我們就講一下該如何通過pro文件的配置來整理源代碼目錄。
先不忙,我們順便講一下為項目添加界面(ui)的方法。大概分為四步:
1, 使用designer繪制ui文件并保存。
2, 編寫ui的派生類。
3, 將相關文件添加到pro。
4, 使用派生類
我們分步驟講解。
第一步,使用designer繪制某對話框資源文件(.ui),請注意,對話框類名:CDialogBase,ui文件名:dialogbase.ui。
這兩個名稱請仔細記下,因為后面會用到。
第二步,我們編寫ui的派生類:
代碼清單:
#ifndef DIALOG_H
#define DIALOG_H
#include "ui_dialogbase.h" // 頭文件名稱來自: dialogbase.ui ---> ui_dialogbase.h
// 第一個父類的名稱來自ui文件中對話框的類名:對象查看器中的類名
// 第二個父類的名稱來自ui文件中對話框基類的名稱(objeceName屬性): CDialogBase
class CDialog : public QDialog, public Ui::CDialogBase
{
public:
CDialog(QWidget* pParent);
~CDialog();
};
#endif
復制代碼
請注意上文中,#include "ui_dialogbase.h"。
該頭文件就用到了我們剛才保存界面文件時的文件名” dialogbase.ui”,Qt的uic命令將該ui文件轉換為ui頭文件:“ui_dialogbase.h”,即 “ui_” 加上”dialogbase”共同拼接成了”ui_dialogbase.h”。
在class CDialog的定義處,我們編寫了多重派生,第一個基類是Qt的QDialog,因為我們在designer中繪制時就是用的QDialog,第二個類看著是否有些面熟?答對了,我們剛才要求大家記住的類名稱就是CDialogBase,而Qt在使用uic命令轉換時會為對話框自動生成一個命名空間Ui,這個基類CDialogBase就在該命名空間內部定義,所以,我們第二個基類是:Ui::CDialogBase。
另外,請大家一定要注意,把Qt的基類寫在前面,原因是:如果我們的CDialog需要使用Q_OBJECT宏,該宏展開時會用到Qt的基類(QObject)的一些接口,而編譯器認為這些接口只能從第一個基類中查找。所以,請把Qt的基類寫在前面。
下面給出CDialog的實現文件:dialog.cpp:
代碼清單:
/*! \file: dialog.h
\brief 示例實現文件
\author 星點課堂:女兒叫老白
\Date 2018/9
*/
#include "dialog.h"
CDialog::CDialog(QWidget* pParent) : QDialog(pParent)
{
setupUi(this);
}
CDialog::~CDialog()
{
}
復制代碼
dialog.cpp比較簡單,我們不做過多討論,唯一需要注意的一點就是在構造函數中一定要調用setupUi(this);否則界面無法正常顯示。
第三步,將相關文件添加到pro。我們目前添加了一個界面文件(dialogbaes.ui),添加了CDialog類的定義(.h)和實現文件(.cpp)。那么我們把他們添加到pro:
代碼清單:
QT += widgets
FORMS += dialogbase.ui
HEADERS += ks02_02.pro \
dialog.h
SOURCES += main.cpp \
dialog.cpp
復制代碼
上述代碼中,FORMS配置項用來描述項目中用到的ui文件,HEADERS和SOURCES兩個配置項在前面章節介紹過。如果要使用界面,請確保QT+=widgets正確配置。
第四步,我們在代碼中使用CDialog。我們需要先包含CDialog的頭文件(dialog.h),然后在代碼中定義CDialog的對象,然后調用其接口:
代碼清單:
/*! \file: main.cpp
\brief mian()函數的實現文件
\author 星點課堂:女兒叫老白
\Date 2018/8
*/
#include <QApplication>
#include <iostream>
#include "qglobal.h"
#include "dialog.h"
using std::cout;
using std::endl;
int main(int argc, char * argv[])
{
Q_UNUSED(argc);
Q_UNUSED(argv);
QApplication app(argc, argv);
CDialog dlg(NULL);
dlg.exec();
return 0;
}
復制代碼
至此我們為項目添加界面的工作就結束了。
下面我們切入正題,通過pro來整理一下目錄。
為了以后進行產品化開發,我們這里引入環境變量,pro中的所有路徑都通過環境變量來間接設置。我們引入一個“TRAINDEVHOME”的環境變量,它指向我們代碼的src的上級目錄。這樣,代碼的目錄結構如下:
TRAINDEVHOME
------bin
------obj
------src
其中bin 、obj、src都是TRAINDEVHOME的子目錄。
在pro中使用環境變量的語法:$$(環境變量)。
比如:$$(TRAINDEVHOME)
代碼清單:
OBJECTS_DIR = $(TRAINDEVHOME)/obj/chapter02/ks02_02
DESTDIR = $(TRAINDEVHOME)/bin
MOC_DIR = $(OBJECTS_DIR)/moc
UI_DIR = $(OBJECTS_DIR)/ui
復制代碼
在上述pro的配置中,OBJECTS_DIR是臨時文件目錄,我們將其設置到obj下對應的子目錄。
DESTDIR是目標文件存放目錄,就是最終生成的exe存放目錄,我們將其放置到TRAINDEVHOME的bin目錄。
Qt的moc和uic命令生成的臨時文件分別放置到OBJECTS_DIR下面的moc和ui子目錄。
每次修改pro之后,請大家再重新執行qmake以便更新相應的Makefile文件,如果需要更新VisualStudio的IDE中的項目文件,則需要執行qmake –tp vc。
然后,就可以重新編譯程序了。
本節課程中,我們講了為項目添加ui文件的過程,簡單匯總知識點如下:
. 如果需要使用界面(ui),pro中務必添加:
QT +=widgets
. 派生類CDialog頭文件中, 包含ui頭文件的拼寫規則和兩個基類的順序以及拼寫。
#include "ui_dialogbase.h" // 頭文件名稱來自: dialogbase.ui ---> ui_dialogbase.h
class CDialog : public QDialog, public Ui::CDialogBase
. 派生類的構造函數中一定要調用setupUi(this);
. 在pro中使用環境變量,通過引用環境變量設置相關目錄。
. 環境變量在使用時應該用下列語法:
$$(環境變量)
. MOC_DIR:用來存放qt的moc命令生成的臨時文件。
. UI_DIR:用來存放qt的uic命令生成的臨時文件。當項目中包含.ui文件時需要用到。
. FORMS:用來描述項目中包含的.ui文件列表
OK,總結就到這里,祝大家工作愉快!
《Qt入門與提高-GUI產品開發》目錄請添加鏈接描述
上一節:KS02-01 通過簡單exe介紹pro基本配置請添加鏈接描述
下一節:KS02-03 加點料-增加一張圖片
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。