中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

K02-02整理一下目錄吧

發布時間:2020-08-10 12:56:13 來源:網絡 閱讀:208 作者:女兒叫老白 欄目:編程語言

版權聲明

作者: 女兒叫老白
轉載請注明出處!

網頁版課程源碼 提取碼: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 加點料-增加一張圖片

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 廊坊市| 临猗县| 霍山县| 胶南市| 杨浦区| 威远县| 应城市| 平舆县| 特克斯县| 泾川县| 辽宁省| 廉江市| 南宫市| 汝南县| 得荣县| 广灵县| 平远县| 隆回县| 军事| 石门县| 金塔县| 永靖县| 朔州市| 望都县| 东乌| 疏勒县| 博白县| 桃园市| 富宁县| 中山市| 甘孜| 中牟县| 南宫市| 黔江区| 拉萨市| 郸城县| 景东| 泗水县| 洪江市| 余江县|