Qt-5開(kāi)發(fā)及實(shí)例-第1章--Qt概述課件_第1頁(yè)
Qt-5開(kāi)發(fā)及實(shí)例-第1章--Qt概述課件_第2頁(yè)
Qt-5開(kāi)發(fā)及實(shí)例-第1章--Qt概述課件_第3頁(yè)
Qt-5開(kāi)發(fā)及實(shí)例-第1章--Qt概述課件_第4頁(yè)
Qt-5開(kāi)發(fā)及實(shí)例-第1章--Qt概述課件_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第1章 Qt概述什么是Qt1Qt的發(fā)展Qt最早是在1991年由奇趣科技開(kāi)發(fā)的,1996年進(jìn)入商業(yè)領(lǐng)域,成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。它也是目前流行的Linux桌面環(huán)境KDE的基礎(chǔ),KDE是Linux發(fā)行版的主要一個(gè)標(biāo)準(zhǔn)組件。2008年,奇趣科技被諾基亞公司收購(gòu),Qt成為諾基亞旗下的編程語(yǔ)言工具。從2009年5月發(fā)布的Qt 4.5起,諾基亞公司宣布Qt源代碼庫(kù)面向公眾開(kāi)放,Qt開(kāi)發(fā)人員可通過(guò)為Qt及與其相關(guān)的項(xiàng)目貢獻(xiàn)代碼、翻譯、示例及其他內(nèi)容,協(xié)助引導(dǎo)和塑造Qt的未來(lái)發(fā)展。2011年,Digia公司(芬蘭的一家IT服務(wù)公司)從諾基亞公司收購(gòu)了Qt的商業(yè)版權(quán)。2012年8月9日,作為

2、非核心資產(chǎn)剝離計(jì)劃的一部分,諾基亞公司宣布將Qt軟件業(yè)務(wù)正式出售給Digia公司。2013年7月3日,Digia公司Qt開(kāi)發(fā)團(tuán)隊(duì)在其官方博客上宣布Qt 5.1正式版發(fā)布;同年12月11日,又發(fā)布Qt 5.2正式版。2014年4月,跨平臺(tái)集成開(kāi)發(fā)環(huán)境Qt Creator 3.1.0正式發(fā)布;同年5月20日,配套發(fā)布了Qt 5.3正式版。2Qt 5.11版的改進(jìn)(1)(2)(4)(3)對(duì)Qt Core進(jìn)行完善,更好地支持Unicode。在Qt Network中,iOS可支持ALPN和HTTP/2。Qt QML編譯器管道負(fù)責(zé)解析和編譯QML,性能提高、更可維護(hù)。將QML編譯為與平臺(tái)無(wú)關(guān)的字節(jié)碼。在Q

3、t Quick中,支持在Image元素中加載壓縮紋理,支持.ktx和.pkm容器文件格式,可以通過(guò)GPU直接處理,減少應(yīng)用程序啟動(dòng)時(shí)間和內(nèi)存消耗。Qt GUI基于Microsoft UI Automation,并且更好地支持高DPI顯示。改進(jìn)Linux上的打印對(duì)話框,為CUPS的選項(xiàng)提供了更好的支持。2Qt 5.11版的改進(jìn)(5)(6)(8)(7)Qt Location實(shí)現(xiàn)對(duì)逐向?qū)Ш降闹С?,通過(guò)API來(lái)創(chuàng)建不綁定到QQuickItems的地圖對(duì)象。改進(jìn)MapPolyline對(duì)象的性能,圖層支持與Map組件結(jié)合。使用Qt for Webassembly,允許用戶將Web和瀏覽器作為Qt應(yīng)用程序的

4、平臺(tái)。支持基于硬件的圖形層和VSP2硬件合成平臺(tái)的技術(shù)預(yù)覽版,有助于提高視頻性能并降低功耗。完善Qt Serialbus和Bluetooth對(duì)CAN總線和BTLE的支持。KNX模塊增加對(duì)OPC/UA的支持。更新Qt Webengine的Chromium版本。支持嵌入式DevTools,包含可安裝的Cookie過(guò)濾器和配額權(quán)限。(9)不再支持MSVC 2013、QNX 6.6和macOS 10.10。3Qt版本說(shuō)明Qt按照不同的版本發(fā)行,分為商業(yè)版和開(kāi)源版。Qt商業(yè)版為商業(yè)軟件提供開(kāi)發(fā)環(huán)境,它們提供傳統(tǒng)商業(yè)軟件發(fā)行版,并且提供在協(xié)議有效期內(nèi)的免費(fèi)升級(jí)和技術(shù)支持服務(wù)。而Qt開(kāi)源版是為了開(kāi)發(fā)自由而設(shè)

5、計(jì)的開(kāi)放源碼軟件,它提供了和商業(yè)版本同樣的功能,在GNU通用公共許可證下,它是免費(fèi)的。第1章 Qt概述Qt 5的安裝1下載Qt 5.112申請(qǐng)免費(fèi)賬號(hào)01下載Qt和申請(qǐng)免費(fèi)賬號(hào)3Qt版本說(shuō)明在Qt官方網(wǎng)站下載Qt5.11安裝包,Qt5.11官方下載地址如下:/bbs/read-htm-tid-1075.htmlQt 5.9 之后的安裝包與之前相比,不再區(qū)分 VS 版本和 MinGW 版本,而是全都整合到了一個(gè)安裝包中。因此,與之前的安裝包相比,體積也是大了不少,以前是 1G 多,現(xiàn)在是 2G 多。選擇Windows Host下的Qt5.11.0 for Windows(2.0GB),如圖1.1

6、所示。2申請(qǐng)免費(fèi)賬號(hào)登錄The Qt Company公司官網(wǎng)(https:/www.qt.io),單擊 ,選擇 ,進(jìn)入Qt申請(qǐng)免費(fèi)賬號(hào)頁(yè),如圖1.2所示。02安裝Qt 5.11安裝Qt 5.11雙擊啟動(dòng)安裝向?qū)В尤隥t5.11.1的安裝歡迎頁(yè)面,如圖1.3所示。單擊“Next”按鈕,出現(xiàn)如圖1.4示界面要求輸入Qt免費(fèi)賬號(hào),并設(shè)置密碼。 安裝Qt 5.11單擊“Next”按鈕,進(jìn)入“設(shè)置-Qt5.11.1”頁(yè)。單擊“下一步”按鈕,進(jìn)入“安裝文件夾”頁(yè),系統(tǒng)列出Qt的默認(rèn)安裝路徑,用戶可以修改,并勾選“Associate common file types with Qt Creator.”復(fù)

7、選框,如圖1.5所示。單擊“下一步”按鈕,在接下來(lái)的“選擇組件”頁(yè),單擊“全選”按鈕選擇安裝全部組件,如圖1.6所示。 安裝Qt 5.11單擊“Next”按鈕,在“許可協(xié)議”頁(yè),選中“I have read and agree to the terms contained in the license agreements.”接受許可協(xié)議,如圖1.7所示。單擊“下一步”按鈕,進(jìn)入Qt開(kāi)始菜單快捷方式,可修改系統(tǒng)默認(rèn)的Qt開(kāi)始菜單,如圖1.8所示。 安裝Qt 5.11單擊“下一步”按鈕,進(jìn)入“已做好安裝準(zhǔn)備”頁(yè),如圖1.9所示。單擊“安裝”按鈕,系統(tǒng)開(kāi)始進(jìn)行安裝,如圖1.10所示。 安裝Qt 5

8、.11安裝進(jìn)程完成后,如圖1.11所示,勾選“Launch Qt Creator”復(fù)選框,單擊“完成”按鈕結(jié)束安裝。系統(tǒng)會(huì)自行啟動(dòng)Qt Creator,Qt Creator初始界面。03運(yùn)行Qt 5 Creator運(yùn)行Qt 5 CreatorQt Creator運(yùn)行后,進(jìn)入Qt Creator初始界面,如圖1.12所示。運(yùn)行Qt 5 Creator在歡迎界面中可以看到最左端的一欄按鈕,該欄按鈕功能分別如下。 (歡迎):在此處可以選擇自帶的例子演示,在下一次打開(kāi)歡迎界面時(shí)能夠顯示最近一次的一些項(xiàng)目,免除自己再去查找的麻煩。 (編輯):在此處編寫(xiě)代碼進(jìn)行程序設(shè)計(jì)。 (設(shè)計(jì)):在這里設(shè)計(jì)圖形界面,進(jìn)

9、行部件屬性設(shè)置、信號(hào)和槽設(shè)置及布局設(shè)置等操作。 (Debug):在此界面下可以根據(jù)需要調(diào)試程序,以便跟蹤觀察程序的運(yùn)行情況。 (項(xiàng)目):在此界面下可以完成開(kāi)發(fā)環(huán)境的相關(guān)配置。 (幫助):可以在此處輸入關(guān)鍵字,查找相關(guān)幫助信息。04Qt 5開(kāi)發(fā)環(huán)境Qt 5開(kāi)發(fā)環(huán)境在設(shè)計(jì)器中用鼠標(biāo)直接拖曳這些窗口部件,能夠高效、快速地實(shí)現(xiàn)GUI界面的設(shè)計(jì),界面直觀形象,所見(jiàn)即所得。Qt Designer界面如圖1.13所示。Qt 5開(kāi)發(fā)環(huán)境進(jìn)入Qt設(shè)計(jì)器主界面后,看到的form部分(如圖1.14所示)就是將要設(shè)計(jì)的頂層窗口部件(頂層窗口部件是其他子窗口部件的載體)。Qt 5開(kāi)發(fā)環(huán)境選中Qt設(shè)計(jì)器“控件”“視圖”中

10、的全部選項(xiàng),在Qt設(shè)計(jì)器的主界面上可以看到設(shè)計(jì)器提供的一些編輯工具子窗口(如圖1.13所示)。 對(duì)象查看器(Object Inspector):列出了界面中所有窗口部件,以及各窗口部件的父子關(guān)系和包容關(guān)系。 屬性編輯器(Property Editor):列出了窗口部件可編輯的屬性。 Action編輯器(Action Editor):列出了為窗口部件設(shè)計(jì)的QAction動(dòng)作,通過(guò)“添加”或“刪除”按鈕可以新建一個(gè)可命名的QAction動(dòng)作或刪除指定的QAction動(dòng)作。 信號(hào)和槽編輯器(Signals & Slots Editor):列出了在Qt設(shè)計(jì)器中關(guān)聯(lián)的信號(hào)和槽,通過(guò)雙擊列中的對(duì)象或信號(hào)/

11、槽,可以進(jìn)行對(duì)象的選擇和信號(hào)/槽的選擇。 控件編輯模式(Edit Widgets):可以在Qt設(shè)計(jì)器中添加GUI窗口部件并修改它們的屬性和外觀。 信號(hào)/槽編輯模式(Edit Signals/Slots):可以在Qt設(shè)計(jì)器中的窗口部件上關(guān)聯(lián)Qt已經(jīng)定義好的信號(hào)和槽。 伙伴編輯模式(Edit Buddies):可以在Qt設(shè)計(jì)器中的窗口部件上建立QLabel標(biāo)簽和其他窗口部件的伙伴關(guān)系。 Tab順序編輯模式(Edit Tab Order):可以在Qt設(shè)計(jì)器中的窗口部件上設(shè)置Tab鍵在窗口部件上的焦點(diǎn)順序。第1章 Qt概述Qt 5開(kāi)發(fā)步驟及實(shí)例Qt 5開(kāi)發(fā)步驟及實(shí)例下面以完成計(jì)算圓面積功能這一簡(jiǎn)單例子

12、來(lái)介紹Qt開(kāi)發(fā)程序的流程,其中涉及Qt應(yīng)用程序用戶界面中的事件關(guān)聯(lián)操作內(nèi)容信號(hào)和槽機(jī)制(Signal & Slot)。當(dāng)用戶輸入一個(gè)圓的半徑后,可以顯示計(jì)算后的圓的面積值。運(yùn)行效果如圖1.15所示。01設(shè)計(jì)器Qt 5 Designer實(shí)現(xiàn)1界面設(shè)計(jì)2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼【例】(簡(jiǎn)單)(CH101)采用設(shè)計(jì)器Qt Designer實(shí)現(xiàn)計(jì)算圓面積,完成如圖1.15所示的功能。首先進(jìn)行界面設(shè)計(jì),然后編寫(xiě)相應(yīng)的計(jì)算圓面積代碼。1界面設(shè)計(jì)步驟如下。(1)單擊運(yùn)行Qt Creator,進(jìn)入歡迎界面(見(jiàn)圖1.10)。單擊其上 按鈕,或者選擇“文件”“新建文件或項(xiàng)目.”命令,創(chuàng)建一個(gè)新的工程,出現(xiàn)“新建項(xiàng)

13、目”窗口,如圖1.16所示。1界面設(shè)計(jì)(2)單擊選擇項(xiàng)目“Application”“Qt Widgets Application”選項(xiàng),單擊“Choose.”按鈕,進(jìn)入下一步。(3)選擇保存項(xiàng)目的路徑并定義自己項(xiàng)目的名字。注意,保存項(xiàng)目的路徑中不能有中文字。項(xiàng)目命名沒(méi)有大小寫(xiě)要求,依據(jù)個(gè)人習(xí)慣命名即可。這里將項(xiàng)目命名為Dialog,保存路徑為D:QtCH1CH101,如圖1.17所示。單擊“下一步”按鈕進(jìn)入下一步驟。1界面設(shè)計(jì)(5)根據(jù)實(shí)際需要,選擇一個(gè)“基類(lèi)”。這里選擇QDialog對(duì)話框類(lèi)作為基類(lèi),這時(shí)“類(lèi)名”“頭文件”“源文件”及“界面文件”都出現(xiàn)默認(rèn)的文件名。注意,對(duì)這些文件名都可以根

14、據(jù)具體需要進(jìn)行相應(yīng)的修改。默認(rèn)選中“創(chuàng)建界面”復(fù)選框,表示需要采用界面設(shè)計(jì)器來(lái)設(shè)計(jì)界面,否則需要利用代碼完成界面的設(shè)計(jì),如圖1.19所示。1界面設(shè)計(jì)(6)選擇完成后單擊“下一步”按鈕,相應(yīng)的文件自動(dòng)加載到項(xiàng)目文件列表中,如圖1.20所示。1界面設(shè)計(jì)單擊“完成”按鈕完成創(chuàng)建,文件列表中的文件自動(dòng)分類(lèi)顯示,如圖1.21(a)所示,各個(gè)文件包含在相應(yīng)的文件夾中,單擊文件夾前的“ ”圖標(biāo)可以顯示該文件夾下的文件;而單擊文件夾前面的“ ”圖標(biāo)則可隱藏該文件夾下的文件。單擊上部灰色工具欄中的過(guò)濾符號(hào) 后,彈出一個(gè)下拉列表,勾選“簡(jiǎn)化樹(shù)形視圖”則切換到簡(jiǎn)單的文件列表,如圖1.21(b)所示。 1界面設(shè)計(jì)(7

15、)雙擊dialog.ui,進(jìn)入界面設(shè)計(jì)器Qt Designer編輯狀態(tài),開(kāi)始進(jìn)行設(shè)計(jì)器(Qt Designer)編程。拖曳控件容器欄的滑動(dòng)條,在最后的Display Widgets容器欄(圖1.22)中找到Label標(biāo)簽控件,拖曳三個(gè)此控件到中間的編輯框中;同樣,在Input Widgets容器欄(圖1.21)中找到Line Edit文本控件,拖曳此控件到中間的編輯框中,用于輸入半徑值;在Buttons容器欄(圖1.24)中找到Push Button按鈕控件,拖曳此控件到中間的編輯框中,用于提交響應(yīng)單擊事件。 1界面設(shè)計(jì)下面將修改拖曳到編輯框中的各控件的屬性,如圖1.25所示,對(duì)象監(jiān)視器內(nèi)容如

16、圖1.26所示。 1界面設(shè)計(jì)然后需要對(duì)各控件屬性進(jìn)行修改,內(nèi)容見(jiàn)表1.1。ClasstextobjectNameQLabel半徑:radiusLabelQLineEditradiusLineEditQLabel面積:areaLabel_1QLabelareaLabel_2QPushButton計(jì)算countBtn其中,修改控件Text值的方法有如下兩種。 直接雙擊控件本身即可修改。 在Qt Designer設(shè)計(jì)器的屬性欄中修改,如修改表示半徑的Label標(biāo)簽,如圖1.25所示。1界面設(shè)計(jì)修改areaLabel_2的“frameShape”為Panel;“frameShadow”為Sunken,

17、如圖1.26所示。最終效果如圖1.27所示。 2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼首先簡(jiǎn)單認(rèn)識(shí)一下Qt編程環(huán)境。找到文件列表中自動(dòng)添加的main.cpp文件,如圖1.19所示。每個(gè)工程都有一個(gè)執(zhí)行的入口函數(shù),此文件中的main()函數(shù)就是此工程的入口。下面詳細(xì)介紹main()函數(shù)的相關(guān)內(nèi)容:#include dialog.h/(a)#include /(b)int main(int argc, char *argv)/(c) QApplication a(argc, argv);/(d) Dialog w;/創(chuàng)建一個(gè)對(duì)話框?qū)ο?w.show();/(e) return a.exec();/(f)2編寫(xiě)相

18、應(yīng)的計(jì)算圓面積代碼其中,(a) #include dialog.h:包含了程序中要完成功能的Dialog類(lèi)的定義,在Dialog類(lèi)中封裝完成所需要的功能。注意,使用哪個(gè)類(lèi)就必須將包含該類(lèi)的頭文件引用過(guò)來(lái)。例如,若要用到一個(gè)按鈕類(lèi)時(shí),則必須在此處添加一行代碼#include ,這表明包含了按鈕(QPushButton)類(lèi)的定義。(b) #include :Application類(lèi)的定義。在每一個(gè)使用Qt圖形化應(yīng)用程序中都必須使用一個(gè)QApplication對(duì)象。QApplication管理了各種各樣的圖形化應(yīng)用程序的廣泛資源、基本設(shè)置、控制流及事件處理等。(c) int main(int arg

19、c, char *argv):應(yīng)用程序的入口,幾乎在所有使用Qt的情況下,main()函數(shù)只需要在將控制轉(zhuǎn)交給Qt庫(kù)之前執(zhí)行初始化,然后Qt庫(kù)通過(guò)事件向程序告知用戶的行為。所有Qt程序中都必須有且只有一個(gè)main()函數(shù)。main()函數(shù)有兩個(gè)參數(shù),即argc和argv。argc是命令行變量的數(shù)量,argv是命令行變量的數(shù)組。2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼(d) QApplication a(argc, argv):a是這個(gè)程序的QApplication對(duì)象。在任何Qt的窗口系統(tǒng)部件被使用之前必須創(chuàng)建QApplication對(duì)象。它在這里被創(chuàng)建并且處理這些命令行變量。所有被Qt識(shí)別的命令行參數(shù)都將

20、從argv中被移去(并且argc也因此而減少)。(e) w.show():當(dāng)創(chuàng)建一個(gè)窗口部件的時(shí)候,默認(rèn)它是不可見(jiàn)的,必須調(diào)用show()函數(shù)使它變?yōu)榭梢?jiàn)。(f) return a.exec():程序進(jìn)入消息循環(huán),等待可能的輸入進(jìn)行響應(yīng)。這里就是main()函數(shù)將控制權(quán)轉(zhuǎn)交給Qt,Qt完成事件處理工作,當(dāng)應(yīng)用程序退出的時(shí)候,exec()函數(shù)的值就會(huì)返回。在exec()函數(shù)中,Qt接收并處理用戶和系統(tǒng)的事件并且將它們傳遞給適當(dāng)?shù)拇翱诓考?編寫(xiě)相應(yīng)的計(jì)算圓面積代碼方式1:在“Line Edit”文本框內(nèi)輸入半徑值,然后單擊“計(jì)算”按鈕,則在areaLabel_2中顯示對(duì)應(yīng)的圓面積。編寫(xiě)代碼步驟如

21、下。(1)在“計(jì)算”按鈕上按鼠標(biāo)右鍵,在彈出的下拉菜單中選擇“轉(zhuǎn)到槽.”命令,在“轉(zhuǎn)到槽”對(duì)話框中選擇“clicked()”信號(hào),單擊“OK”按鈕,如圖1.28所示。2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼(2)進(jìn)入dialog.cpp文件中按鈕單擊事件的槽函數(shù)on_countBtn_clicked()。信號(hào)與槽連接的具體說(shuō)明參照本書(shū)后面提供的知識(shí)點(diǎn)鏈接部分。在此函數(shù)中添加如下代碼:void Dialog: on_countBtn_clicked() bool ok; QString tempStr; QString valueStr=ui-radiusLineEdit-text(); int valueI

22、nt=valueStr.toInt(&ok); double area=valueInt*valueInt*PI;/計(jì)算圓面積 ui-areaLabel_2-setText(tempStr.setNum(area);(3)在dialog.cpp文件開(kāi)始處添加以下語(yǔ)句: const static double PI=3.1416;定義全局變量PI。運(yùn)行程序,在“Line Edit”文本框內(nèi)輸入半徑值,單擊“計(jì)算”按鈕后,顯示圓面積,完成計(jì)算圓面積功能。2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼方式2:在“Line Edit”文本框內(nèi)輸入半徑值,不需要單擊按鈕觸發(fā)單擊事件,直接就在areaLabel_2中顯示圓面

23、積。編寫(xiě)代碼步驟如下。(1)在“Line Edit”文本框上按鼠標(biāo)右鍵,在彈出的下拉菜單中選擇“轉(zhuǎn)到槽.”命令,在“轉(zhuǎn)到槽”對(duì)話框中選擇“textChanged(QString)”信號(hào),如圖1.29所示。2編寫(xiě)相應(yīng)的計(jì)算圓面積代碼(2)單擊“OK”按鈕,進(jìn)入dialog.cpp文件中的文本編輯框改變值內(nèi)容事件的槽函數(shù)on_radiusLineEdit_textChanged(const QString &arg1)。在此函數(shù)中添加如下代碼:void Dialog:on_radiusLineEdit_textChanged(const QString &arg1) bool ok; QStrin

24、g tempStr; QString valueStr=ui-radiusLineEdit-text(); int valueInt=valueStr.toInt(&ok); double area=valueInt*valueInt*PI;/計(jì)算圓面積 ui-areaLabel_2-setText(tempStr.setNum(area);02代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例【例】(簡(jiǎn)單)(CH102)采用編寫(xiě)代碼的方式來(lái)實(shí)現(xiàn)計(jì)算圓面積的功能。步驟如下。(1)首先創(chuàng)建一個(gè)新工程。創(chuàng)建過(guò)程和本書(shū)1.3.1節(jié)界面設(shè)計(jì)中的第(1)(7)步相同,只是在第(3)步中,項(xiàng)目命名為Dialog且保存路徑為

25、D:QtCH1CH102,在第(5)步中,取消“創(chuàng)建界面”復(fù)選框的選中狀態(tài)。(2)在上述工程的dialog.h中添加如下加黑代碼:#include / (a)#include / (a)#include / (a)class Dialog : public QDialogQ_OBJECTpublic:Dialog(QWidget *parent = 0); Dialog();private:QLabel *label1,*label2;/ (b)QLineEdit *lineEdit;/ (b)QPushButton *button;/ (b);代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例其中,(a) 加入實(shí)現(xiàn)Label

26、、LineEdit、PushButton控件的頭文件。(b) 定義界面中的Label、LineEdit、PushButton控件對(duì)象。label1標(biāo)簽對(duì)象提示“請(qǐng)輸入圓的半徑”,label2標(biāo)簽對(duì)象顯示圓面積計(jì)算結(jié)果,LineEdit文本框?qū)ο笥糜谳斎氚霃?,PushButton為“計(jì)算”命令按鈕對(duì)象。Q_OBJECT宏的作用是啟動(dòng)Qt 5元對(duì)象系統(tǒng)的一些特性(如支持信號(hào)和槽等),它必須放置到類(lèi)定義的私有區(qū)中。代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例(3)在dialog.cpp 中添加如下代碼:#include / (a)Dialog:Dialog(QWidget *parent) : QDialog(parent)

27、label1=new QLabel(this); label1-setText(tr(請(qǐng)輸入圓的半徑:); lineEdit=new QLineEdit(this); label2=new QLabel(this); button=new QPushButton(this); button-setText(tr(顯示對(duì)應(yīng)圓的面積); QGridLayout *mainLayout=new QGridLayout(this);/ (b) mainLayout-addWidget(label1,0,0); mainLayout-addWidget(lineEdit,0,1); mainLayout

28、-addWidget(label2,1,0); mainLayout-addWidget(button,1,1);代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例其中,(a) #include 為加入實(shí)現(xiàn)布局管理器的頭文件。(b) QGridLayout *mainLayout=new QGridLayout(this)用于布局管理器,將所有控件的位置固定。界面運(yùn)行效果如圖1.30所示。代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例(4)完成程序功能:以上第(1)(3)步代碼只完成了界面設(shè)計(jì),下面同樣通過(guò)兩種觸發(fā)不同控件事件的方式來(lái)完成計(jì)算圓面積的功能。方式1:在lineEdit文本框內(nèi)輸入所需圓的半徑值,單擊“顯示對(duì)應(yīng)圓的面積”按鈕后,在label2中

29、顯示相對(duì)應(yīng)的圓的面積值。 打開(kāi)dialog.h文件,在類(lèi)構(gòu)造函數(shù)和控件成員聲明后,添加如下加黑代碼:class Dialog : public QDialog . QPushButton *button;private slots: void showArea(); ;代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例 打開(kāi)dialog.cpp文件,在構(gòu)造函數(shù)中添加如下加黑代碼:Dialog:Dialog(QWidget *parent) : QDialog(parent) . mainLayout-addWidget(button,1,1); connect(button,SIGNAL(clicked(),this,SLOT

30、(showArea(); 在showArea()中實(shí)現(xiàn)顯示圓面積功能,代碼如下:const static double PI=3.1416;void Dialog:showArea() bool ok; QString tempStr; QString valueStr=lineEdit-text(); int valueInt=valueStr.toInt(&ok); double area=valueInt*valueInt*PI; label2-setText(tempStr.setNum(area);代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例 運(yùn)行程序。在lineEdit文本框中輸入圓半徑值,單擊“顯示對(duì)應(yīng)圓的

31、面積”按鈕后,在label2中顯示圓面積值,最終運(yùn)行結(jié)果如圖1.33所示。代碼實(shí)現(xiàn)簡(jiǎn)單實(shí)例方式2:在lineEdit文本框中輸入所需圓的半徑值后,不必單擊“顯示對(duì)應(yīng)圓的面積”按鈕,直接在label2中顯示圓的面積值。操作步驟和方式1相同,只是在上述第步中,添加的代碼修改為如下加黑代碼:Dialog:Dialog(QWidget *parent) : QDialog(parent) . . mainLayout-addWidget(button,1,1); connect(lineEdit,SIGNAL(textChanged(QString),this,SLOT(showArea();03Qt

32、低版本實(shí)例遷移Qt低版本實(shí)例遷移Qt 5開(kāi)發(fā)及實(shí)例(第3版)以Qt 5.8進(jìn)行介紹,所有實(shí)例在該版本下開(kāi)發(fā)。本書(shū)以Qt 5.11作為平臺(tái)開(kāi)發(fā),其基本內(nèi)容與Qt 5.8是兼容的。如果在Qt 5.11平臺(tái)下打開(kāi)Qt 5.8的實(shí)例工程,系統(tǒng)顯示如圖1.34所示。第1章 Qt概述Qt 5的安裝:概念解析00伙伴編輯模式(Edit Buddies)伙伴編輯模式(Edit Buddies)QLabel標(biāo)簽和伙伴(buddy)窗口部件包括一個(gè)標(biāo)簽(QLabel)和一個(gè)窗口部件,它們具有伙伴關(guān)系,指當(dāng)用戶激活標(biāo)簽的快捷鍵時(shí),鼠標(biāo)/鍵盤(pán)的焦點(diǎn)將會(huì)轉(zhuǎn)移到它的伙伴窗口部件上。只有QLabel標(biāo)簽對(duì)象才可以有伙伴窗口

33、部件,也只有在該QLabel對(duì)象具有快捷鍵(在顯示文本的某個(gè)字符前面添加一個(gè)前綴“&”,就可以定義快捷鍵)時(shí),伙伴關(guān)系才有效。例如:QLineEdit* ageLineEdit = new QLineEdit(this);QLabel* ageLabel = new QLabel(&Age,this);ageLabel-setBuddy(ageLineEdit);代碼定義了ageLabel標(biāo)簽的組合鍵為Alt+A,并將行編輯框ageLineEdit設(shè)為它的伙伴窗口部件。當(dāng)用戶按下Alt+A組合鍵時(shí),焦點(diǎn)將會(huì)跳至行編輯框ageLineEdit中。第1章 Qt概述Qt 5開(kāi)發(fā)步驟及實(shí)例:概念解析0

34、1信號(hào)和槽機(jī)制(Signal & Slot)1信號(hào)與槽機(jī)制的連接方式2信號(hào)與槽機(jī)制的優(yōu)點(diǎn)3信號(hào)與槽機(jī)制的效率1信號(hào)與槽機(jī)制的連接方式(1)一個(gè)信號(hào)可以與另一個(gè)信號(hào)相連,代碼如下:connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1);表示Object1的信號(hào)1發(fā)送可以觸發(fā)Object2的信號(hào)1發(fā)送。(2)同一個(gè)信號(hào)可以與多個(gè)槽相連,代碼如下:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2);connect(Object1,SIGNAL(signal2),Object3,SIGNAL

35、(slot1);(3)同一個(gè)槽可以響應(yīng)多個(gè)信號(hào),代碼如下:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2);connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2);但是,常用的連接方式為:connect(Object1,SIGNAL(signal),Object2,SLOT(slot);其中,signal為對(duì)象Object1的信號(hào),slot為對(duì)象Object2的槽。在本書(shū)1.3.1節(jié)(通過(guò)設(shè)計(jì)器實(shí)現(xiàn))實(shí)例中,在Qt應(yīng)用程序的用戶界面加入計(jì)算圓面積的“計(jì)算”按鈕后,應(yīng)用程序并沒(méi)有響應(yīng)計(jì)算

36、操作。這是因?yàn)槌绦蜻€沒(méi)有將相應(yīng)的信號(hào)和槽關(guān)聯(lián)起來(lái)。因此,為了響應(yīng)用戶的計(jì)算面積值的操作,需要將“計(jì)算”按鈕發(fā)送的單擊信號(hào)QAbstractButton: clicked()和對(duì)話框QDialog的Dialog:on_countBtn_clicked()槽關(guān)聯(lián)起來(lái),可以根據(jù)需要在槽函數(shù)中進(jìn)行相應(yīng)的操作。類(lèi)似地,改變文本編輯框內(nèi)容信號(hào)QLineEdit: textChanged(QString)產(chǎn)生后與對(duì)話框QDialog的Dialog:on_ radiusLineEdit_textChanged (const QString &arg1)槽關(guān)聯(lián)起來(lái)。在本書(shū)1.3.2節(jié)(通過(guò)編寫(xiě)代碼實(shí)現(xiàn))實(shí)例中,

37、將“顯示對(duì)應(yīng)圓的面積”按鈕發(fā)送的單擊信號(hào)QAbstractButton:clicked()和對(duì)話框QDialog的Dialog:showArea()槽關(guān)聯(lián)起來(lái)。類(lèi)似地,改變文本編輯框內(nèi)容信號(hào)QLineEdit:textChanged(QString)產(chǎn)生后也與對(duì)話框QDialog的Dialog:showArea()槽關(guān)聯(lián)起來(lái)。SIGNAL()和SLOT()是Qt定義的兩個(gè)宏,它們返回其參數(shù)的C語(yǔ)言風(fēng)格的字符串(const char*)。因此,下面關(guān)聯(lián)信號(hào)和槽的兩個(gè)語(yǔ)句是等同的:connect(button,SIGNAL(clicked(),this,SLOT(showArea();connect(button, clicked(),this, showArea();1信號(hào)與槽機(jī)制的連接方式2信號(hào)與槽機(jī)制的優(yōu)點(diǎn)(1)類(lèi)型安全。需要關(guān)聯(lián)的信號(hào)和槽的簽名必須是等同的,即信號(hào)的參數(shù)類(lèi)型和參數(shù)個(gè)數(shù)與接收該信號(hào)的槽的參數(shù)類(lèi)型和參數(shù)個(gè)數(shù)相同。不過(guò),一個(gè)槽的參數(shù)個(gè)數(shù)是可以少于信號(hào)的參數(shù)個(gè)數(shù)的,但缺少的參數(shù)必須是信號(hào)參數(shù)的最后一個(gè)或幾個(gè)參數(shù)。如果信號(hào)和槽的簽名不符,編譯器就會(huì)報(bào)錯(cuò)。(2)松散耦合。信號(hào)和槽機(jī)制減弱了Qt對(duì)象的耦合度。激發(fā)信號(hào)的Qt對(duì)象無(wú)須知道是哪個(gè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論