柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語(yǔ)言 【Qt】項(xiàng)目代碼
柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語(yǔ)言 【Qt】項(xiàng)目代碼
main.cpp文件
argc:命令行參數(shù)個(gè)數(shù)。*argv[ ]:每一個(gè)命令行參數(shù)的內(nèi)容。main的形參就是命令行參數(shù)。QApplication a(argc, argv)
編寫一個(gè)Qt的圖形化界面程序,一定需要QApplication對(duì)象。
widget?w;
在創(chuàng)建項(xiàng)目的時(shí)候,勾選widget,創(chuàng)建了一個(gè)widget的類。
w.show();
創(chuàng)建一個(gè)控件對(duì)象,并顯示出來。(.show()方法讓控件顯示出來,.hide()方法讓控件隱藏,這倆種方法都是widget的父類Qwidget所提供的)。
exec()表示讓程序執(zhí)行起來。
當(dāng)前Qt中的exec和Linux中的exec沒有任何關(guān)系,只是名字相同,這樣的設(shè)定在計(jì)算機(jī)中是比較常見的,同一種術(shù)語(yǔ),在不同的場(chǎng)景,表示的含義不一樣,需要結(jié)合上下文來理解。
widget.h文件
ifndef WIDGET_Hdefine WIDGET_H
header guard:保證頭文件只被包含一次,更推薦寫成#pragma once
class widget;聲明一個(gè)類public Qwidget;創(chuàng)建項(xiàng)目時(shí),選擇的父類
這里的父類是Qt SDK內(nèi)置的,要想使用這個(gè)類,需要包含對(duì)應(yīng)的頭文件#include
? ? ? ? Qt的設(shè)定就是使用Qt內(nèi)置的類,包含的頭文件的名字就是和類名一致的,當(dāng)然,并不是用到的所有的Qt的類都需要顯示包含頭文件。在C++中,頭文件可能是“間接包含的”,就比如:引入了a.h,在a.h中又包含了b.h文件,此時(shí),就相當(dāng)于把a(bǔ).h和b.h都包含了。
【注意】在后續(xù)寫Qt代碼的原則是,一個(gè)Qt的類,先進(jìn)行使用,如果可以直接使用,說明對(duì)應(yīng)的頭文件已經(jīng)被間接包含過了,無(wú)需顯式包含,而如果這個(gè)類提示找不到定義,則需要手動(dòng)的顯式的把對(duì)應(yīng)的頭文件給包含。
?Q_OBJECT
Q_OBJECT是一個(gè)Qt內(nèi)置的宏,宏和本質(zhì)就是文本替換,而Q_OBJECT展開之后會(huì)生成一大堆的代碼。
在Qt中有一個(gè)非常核心的機(jī)制,“信號(hào)和槽”,如果某個(gè)類向使用“信號(hào)和槽”就需要引入Q_OBJECT這個(gè)宏。
QWidge *parent = nullptr;
在Qt中引入了“對(duì)象樹”機(jī)制。此時(shí),如果創(chuàng)建一個(gè)Qt對(duì)象,就可以將這個(gè)對(duì)象掛到對(duì)象樹上,然后往樹上掛的時(shí)候需要值得“父節(jié)點(diǎn)”。這于數(shù)據(jù)結(jié)構(gòu)中的“樹”類似,一個(gè)節(jié)點(diǎn),可以有N個(gè)節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)只能有一個(gè)父節(jié)點(diǎn),此處對(duì)象樹就是一個(gè)普通的N叉樹(非二叉樹)。
Ui::Widget *ui;和form file密切相關(guān)。
?widget.cpp文件
widget.h 創(chuàng)建項(xiàng)目生成的頭文件ui_widget.h form file 被qmake生成的頭文件
把form file生成的界面和當(dāng)前widget關(guān)聯(lián)起來。
widget.ui文件
當(dāng)直接雙擊ui文件的時(shí)候,Qt Creator會(huì)調(diào)用Qt Designer,打開ui文件,此時(shí)就會(huì)打開圖形化的界面編輯器。
中間這部分是生成的程序窗口左邊部分是Qt中內(nèi)置的控件,拖拽左側(cè)的控件到程序窗口可以創(chuàng)建具體的界面。右邊部分是編輯屬性,每一個(gè)控件都有很多的屬性,就影響到控件具體的行為。
點(diǎn)擊左側(cè)編輯按鈕,里面顯式的就是.ui文件的本體內(nèi)容。
這個(gè)格式稱為xml格式,xml和html非常類似,都是使用成對(duì)的標(biāo)簽來表示數(shù)據(jù)。
html雖然也是通過標(biāo)簽來表示的,但是html的標(biāo)簽都是固定的,每一個(gè)標(biāo)簽的含義有一個(gè)專門的標(biāo)準(zhǔn)委員會(huì)約定,所有的瀏覽器也是按照同樣的規(guī)則來解釋的。
xml這里的標(biāo)簽,有哪些接口,都表示什么含義,這些都是可以自定義的。此處看到的這些標(biāo)簽,就是開發(fā)Qt的程序員來定義的。這里的標(biāo)簽含義具體是什么內(nèi)容不需要關(guān)注,只要知道ui文件本質(zhì)上是一個(gè)xml格式即可。
此處約定的xml標(biāo)簽的含義與Linux網(wǎng)絡(luò)原理中的自定義應(yīng)用層協(xié)議類似。
在Qt中使用xml文件就是描述程序的界面是什么樣子的,然后qmake會(huì)調(diào)用相關(guān)的工具,依據(jù)這個(gè)xml文件生成一些C++代碼。從而把完整的界面構(gòu)造出來。
.pro文件
?這是Qt項(xiàng)目的工程文件,也是qmake工具構(gòu)建時(shí)候的重要依據(jù)。
?要引入的Qt的模板,后續(xù)可能會(huì)被修改。
按照C++11的標(biāo)準(zhǔn)進(jìn)行編譯
描述了當(dāng)前項(xiàng)目中,參與構(gòu)建的文件都有哪些(編譯器需要編譯哪些文件),這個(gè)地方不需要手動(dòng)修改,Qt creator會(huì)自動(dòng)維護(hù)。
.pro文件類似于Linux中的make file文件。
Qt creator將過程中編譯的細(xì)節(jié)都封裝好,不需要過多的關(guān)注,只需要點(diǎn)擊運(yùn)行按鈕,就可以直接編譯通過。
總結(jié)
上述講到的.h、.cpp、.pro、.ui文件都是源代碼,如果編譯運(yùn)行Qt項(xiàng)目,構(gòu)建過程還會(huì)生成一些中間文件。
打開文件資源管理器,看看項(xiàng)目對(duì)應(yīng)的目錄,在運(yùn)行一次程序之后,就會(huì)在項(xiàng)目目錄并列的地方,多出來一個(gè)“build_xxx”目錄,這個(gè)目錄里面就是該項(xiàng)目運(yùn)行過程中,生成的一些臨時(shí)文件。
makefile:編譯Qt程序,還是會(huì)用到makefile,只不過這個(gè)makefile,不需要手動(dòng)寫,而是qmake自動(dòng)生成的。
ui_widget.h就是widget.ui xml生成的.h文件。
柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語(yǔ)言 【Qt】項(xiàng)目代碼
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。