Qt C++程序設(shè)計(jì) 課件匯 韓改寧 chap1-6 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介- QWidge_第1頁(yè)
Qt C++程序設(shè)計(jì) 課件匯 韓改寧 chap1-6 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介- QWidge_第2頁(yè)
Qt C++程序設(shè)計(jì) 課件匯 韓改寧 chap1-6 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介- QWidge_第3頁(yè)
Qt C++程序設(shè)計(jì) 課件匯 韓改寧 chap1-6 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介- QWidge_第4頁(yè)
Qt C++程序設(shè)計(jì) 課件匯 韓改寧 chap1-6 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介- QWidge_第5頁(yè)
已閱讀5頁(yè),還剩256頁(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)介

QtC++程序設(shè)計(jì)課程目的本課程圍繞軟件設(shè)計(jì)方法和開發(fā)工具為基礎(chǔ),介紹了面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn),理解其設(shè)計(jì)方法,學(xué)會(huì)QtC++編程技術(shù)。課程采用講授與實(shí)驗(yàn)相結(jié)合的方式。著重培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力,通過(guò)軟件開發(fā)流程、圖形用戶界面的編程方法等基礎(chǔ)實(shí)驗(yàn),使學(xué)生能夠掌握跨平臺(tái)軟件設(shè)計(jì)的基本方法。學(xué)生基礎(chǔ):學(xué)過(guò)C語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、嵌入式Linux操作系統(tǒng)等課程特點(diǎn)首先在PC機(jī)開發(fā)Qt應(yīng)用程序,然后在PC機(jī)上自己動(dòng)手搭建嵌入式系統(tǒng)的開發(fā)平臺(tái),利用交叉編譯器進(jìn)行嵌入式應(yīng)用編譯,最后將開發(fā)程序移植到開發(fā)板上。為后續(xù)學(xué)習(xí)和理解嵌入式系統(tǒng)的開發(fā)奠定基礎(chǔ)。教材課程概況-主要內(nèi)容課程概況-主要內(nèi)容實(shí)驗(yàn)系統(tǒng)的內(nèi)容目標(biāo)平臺(tái)開發(fā)工具實(shí)驗(yàn)項(xiàng)目QCreatorARM_Linux_gccA8boardCortex的ARM開發(fā)板應(yīng)用程序設(shè)計(jì)交叉編譯移植參考書目1、陸文周等,Qt5開發(fā)及實(shí)例(含典型案例視頻分析)(第4版),電子工業(yè)出版社2019.32、王維波等,Qt5.9C++開發(fā)指南,人民郵電出版社2018.53、彭源,QtC++編程從入門到實(shí)戰(zhàn),清華大學(xué)出版社,2022.14、朱文偉等,Qt6.x從入門到精通,清華大學(xué)出版社,2022.9參考資料Qt官網(wǎng)

Qt官網(wǎng):

https://www.qt.ioQt下載:http://www.qt.io/downloadQt所有下載:http://download.qt.io/archive/qtQt官方發(fā)布下載:http://download.qt.io/official_releases/qtOpenSource下載:http://www.qt.io/download-open-source/#section-2QtWiKi:https://wiki.qt.io/Main_Page參考資料社區(qū)論壇國(guó)外論壇:

Qt-Centre:

一個(gè)非常全面的外國(guó)網(wǎng)站,有forum、wiki、docs、blogs等。Qt-forum:/

比較有名的國(guó)際Qt編程論壇。Qt-Apps:

可以找到很多免費(fèi)的Qt應(yīng)用,獲得源碼來(lái)學(xué)習(xí)研究,使用時(shí)請(qǐng)遵守相關(guān)開源協(xié)議。國(guó)內(nèi)論壇:CSDNQt論壇:

/forums/QtQTCN開發(fā)網(wǎng):

Qter開源社區(qū):

參考資料1、掌握一種學(xué)習(xí)方法2、學(xué)習(xí)了解軟件開發(fā)技術(shù)的基本概念、方法和知識(shí)3、獲得軟件開發(fā)設(shè)計(jì)實(shí)踐經(jīng)驗(yàn)4、為嵌入式系統(tǒng)軟件開發(fā)奠定基礎(chǔ)希望大家有所收獲參考教材課程概況-教學(xué)形式

講課項(xiàng)目實(shí)驗(yàn)學(xué)習(xí)方法課程概況-考核方式平時(shí)(10%)課堂表現(xiàn)項(xiàng)目(20%)實(shí)驗(yàn)大作業(yè)考試(70%)課程概況-課程安排共48課時(shí)(1*2課時(shí)/周)講授32課時(shí)實(shí)驗(yàn)16課時(shí)實(shí)驗(yàn)地點(diǎn):物聯(lián)網(wǎng)工程實(shí)驗(yàn)室實(shí)驗(yàn)時(shí)間:周三1-2節(jié)(從第四周開始)第一章面向?qū)ο蟪绦蛟O(shè)計(jì)與C++主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)類與對(duì)象C++語(yǔ)法C語(yǔ)言是結(jié)構(gòu)化和模塊化的語(yǔ)言,C程序的設(shè)計(jì)者必須關(guān)系設(shè)計(jì)程序的每個(gè)細(xì)節(jié),準(zhǔn)確地考慮程序運(yùn)行時(shí)每一刻發(fā)生的事情,當(dāng)成效規(guī)模變大時(shí),結(jié)構(gòu)化程序設(shè)計(jì)就顯得力不從心。為了解決軟件設(shè)計(jì)危機(jī),在20世紀(jì)80年代提出了面向?qū)ο蟮某绦蛟O(shè)計(jì)思想(ObjectOrientedProgramming——OOP)。OOP概念:是一種程序設(shè)計(jì)的泛型,同時(shí)也是一種程序開發(fā)的方法,它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述

結(jié)構(gòu)化程序設(shè)計(jì)軟件的結(jié)構(gòu)化分析、設(shè)計(jì)方法工程化的概念方法但無(wú)法很好的支持越來(lái)越復(fù)雜、龐大的系統(tǒng)需求面向?qū)ο蟪绦蛟O(shè)計(jì)方法直接將問(wèn)題的映射到問(wèn)題的本身有目的地將系統(tǒng)分解為模塊降溫貼分解為一系列的實(shí)體(對(duì)象)方便設(shè)計(jì)、科委會(huì)性、可擴(kuò)展性好比如:圖書館管理系統(tǒng)的設(shè)計(jì)1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蟮某绦蜃罡镜哪康氖鞘钩绦騿T更好的理解和管理龐大而復(fù)雜的程序,它在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上完成進(jìn)一步的抽象。這種在設(shè)計(jì)方法上更高層次的抽象正是為了適應(yīng)目前軟件開發(fā)的特點(diǎn)。面向?qū)ο蟮娜齻€(gè)基本特征是:封裝、繼承、多態(tài)。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新的程序設(shè)計(jì)范型。主要特征是:程序=對(duì)象+消息面向?qū)ο蟪绦蛟O(shè)計(jì)的基本元素是對(duì)象。面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點(diǎn)是:1.程序一般由類的定義和類的使用兩部分組成;2.程序中的一切操作都是通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn)的,對(duì)象接收到消息后,啟動(dòng)有關(guān)方法完成相應(yīng)的操作。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述掌握面向?qū)ο蟪绦蛟O(shè)計(jì),首先應(yīng)該學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。面向?qū)ο笳Z(yǔ)言形成了兩大類。一類是純面向?qū)ο笳Z(yǔ)言,如Smalltalk和Java等語(yǔ)言另一類是混合型面向?qū)ο笳Z(yǔ)言,也就是在過(guò)程語(yǔ)言的基礎(chǔ)上增加面向?qū)ο髾C(jī)制,如C++和CLOS等語(yǔ)言。純面向?qū)ο笳Z(yǔ)言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶?shí)現(xiàn),而混合型面向?qū)ο笳Z(yǔ)言的目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。成熟的面向?qū)ο笳Z(yǔ)言通常都提供豐富的類庫(kù)和強(qiáng)有力的開發(fā)環(huán)境。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蠓椒ǖ奶攸c(diǎn)程序設(shè)計(jì)的重點(diǎn)在數(shù)據(jù)而不是函數(shù)程序由對(duì)象組成對(duì)象之家通過(guò)相互協(xié)作來(lái)完成功能大多數(shù)對(duì)象的定義以數(shù)據(jù)為中心函數(shù)和相關(guān)的數(shù)據(jù)緊密結(jié)合數(shù)據(jù)可以被隱藏很容易擴(kuò)充新的數(shù)據(jù)和函數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)的一般步驟分析實(shí)際問(wèn)題,分別并抽取其中的類和對(duì)象設(shè)計(jì)相應(yīng)的類,并根據(jù)各種類創(chuàng)建相應(yīng)的對(duì)象協(xié)調(diào)這些對(duì)象完成程序功能(消息)1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述1、對(duì)象對(duì)象:在現(xiàn)實(shí)生活中,任何事物都是對(duì)象??梢允且粋€(gè)有形的具體存在的事物(一張桌子,一個(gè)學(xué)生,一輛汽車);也可以是一個(gè)無(wú)形的,抽象的事物(一次演出,一場(chǎng)球賽,一次出差)——萬(wàn)物皆對(duì)象。對(duì)象既可以很簡(jiǎn)單,也可以很復(fù)雜,復(fù)雜的對(duì)象可以由若干簡(jiǎn)單的對(duì)象構(gòu)成。對(duì)象一般可以表示為:屬性+行為,一個(gè)對(duì)象往往是由一組屬性和一組行為構(gòu)成的——具有各種的屬性,對(duì)外界呈現(xiàn)各自的行為。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是描述其屬性的數(shù)據(jù)以及對(duì)這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。在C++中每個(gè)對(duì)象都是由數(shù)據(jù)和操作代碼(通常用函數(shù)來(lái)實(shí)現(xiàn))兩部分組成的。——程序中一切都是對(duì)象1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語(yǔ)1、對(duì)象現(xiàn)實(shí)世界中:比如:“小張”、“小王”都是具體的對(duì)象,但“人”不是具體的對(duì)象,“人”是類,是抽象概念現(xiàn)實(shí)世界中的對(duì)象,具有以下特征:每一個(gè)對(duì)象必須有一個(gè)名字以區(qū)別于其他對(duì)象;用屬性來(lái)描述它的特征;有一組操作,每組操作決定對(duì)象的一種行為;對(duì)象的行為可以分為兩類:一類是作用于自身的行為;另一類是作用于其他對(duì)象的行為1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語(yǔ)2、類類:在現(xiàn)實(shí)世界中,“類”是一組具有相同屬性和行為的對(duì)象的抽象。類和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系。類是對(duì)多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,對(duì)象又是類的個(gè)體實(shí)物,一個(gè)對(duì)象是類的一個(gè)實(shí)例。類是某些對(duì)象共同特征的表示類將屬性及行為相同或者相似的對(duì)象歸為一類類可以看成是對(duì)象的抽象,代表了此類對(duì)象所具有的共有屬性和行為在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,每一個(gè)對(duì)象都屬于一個(gè)特定的類。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語(yǔ)3、消息在面向?qū)ο蟪绦蛟O(shè)計(jì)中,一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求被稱為“消息”。當(dāng)對(duì)象接收到發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操作。例如:有一個(gè)教師對(duì)象和一個(gè)學(xué)生對(duì)象,學(xué)生可以發(fā)出消息,請(qǐng)求老師演示一個(gè)實(shí)驗(yàn),當(dāng)老師接收到這個(gè)消息后,確定應(yīng)完成的操作并執(zhí)行之。消息具有以下三個(gè)性質(zhì):(1)同一個(gè)對(duì)象可以接收不同形式的多個(gè)消息,作出不同的響應(yīng);(2)相同形式的消息可以傳遞給不同的對(duì)象,所作出的響應(yīng)可以是不同的;(3)對(duì)消息的響應(yīng)并不是必須的,對(duì)象可以響應(yīng)消息,也可以不響應(yīng)。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語(yǔ)4、抽象抽象是將有關(guān)事物的共性歸納、集中的過(guò)程。抽象是對(duì)復(fù)雜世界的簡(jiǎn)單表示,抽象并不打算了解全部的問(wèn)題,而只強(qiáng)調(diào)感興趣的信息,忽略了與主題無(wú)關(guān)的信息。例如:設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)中,只關(guān)心學(xué)生的姓名、學(xué)號(hào)、成績(jī)等,而對(duì)他的身高體重等信息就可以忽略。設(shè)計(jì)一個(gè)學(xué)生健康信息管理系統(tǒng)中,身高、體重等信息必須抽象出來(lái),而成績(jī)則可以忽略。抽象是通過(guò)特定的實(shí)例抽取共同性質(zhì)后形成概念的過(guò)程。1.2類、對(duì)象和消息三、類的相關(guān)術(shù)語(yǔ)4、抽象面向?qū)ο蟪绦蛟O(shè)計(jì)中的抽象包括兩個(gè)方面:數(shù)據(jù)抽象和代碼抽象(或稱為行為抽象)。前者描述某類對(duì)象的屬性或狀態(tài),也就是此類對(duì)象區(qū)別于彼類對(duì)象的特征物理量——數(shù)據(jù);后者描述了某類對(duì)象的公共行為特征或具有的公共功能——方法。比如:鐘表數(shù)據(jù)(屬性)——時(shí)分秒:表示為intHour;intMinut;intSecond方法(行為)——設(shè)置時(shí)間和顯示時(shí)間:表示為

SetTime();ShowTime()1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)5、封裝在現(xiàn)實(shí)世界中,所謂封裝就是把某個(gè)事物包圍起來(lái),使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,封裝是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來(lái)放在對(duì)象內(nèi)部,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。比如一臺(tái)洗衣機(jī),說(shuō)明對(duì)象的封裝特征。首先,每一臺(tái)洗衣機(jī)有一些區(qū)別于其他洗衣機(jī)的靜態(tài)屬性。如出廠日期、機(jī)器編號(hào)等。洗衣機(jī)上有一些按鍵,如“啟動(dòng)”、“暫?!薄ⅰ斑x擇”等,這些按鍵安裝在洗衣機(jī)的表面,人們通過(guò)他們與洗衣機(jī)交流,告訴它應(yīng)該做什么。但我們無(wú)法(也沒(méi)必要)操作洗衣機(jī)的內(nèi)部電路和機(jī)械控制部件,因?yàn)樗鼈儽谎b在洗衣機(jī)里面,這對(duì)于用戶來(lái)說(shuō)是隱蔽的,不可見(jiàn)的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)5、封裝是一種信息屏蔽技術(shù);利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起;用戶只能看到對(duì)象的封裝界面信息,對(duì)象的內(nèi)部細(xì)節(jié)對(duì)用戶是屏蔽的;封裝的目的在于將對(duì)象的使用者和設(shè)計(jì)者分開,使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者提供的小型來(lái)訪問(wèn)對(duì)象。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)6、繼承繼承是指新的類可以獲得已有類(稱為超類、基類或父類)的屬性和行為,稱新類為已有類的派生類(也稱為子類)?,F(xiàn)實(shí)生活中,繼承是很普遍和容易理解的。例如:我們繼承了父母的一些特征,如種族、血型、眼睛的顏色等,父母是我們所具有的屬性的基礎(chǔ)。在繼承過(guò)程中派生類也可以修改繼承的方法或增加新的方法,使之更適合特殊的需要。以面向?qū)ο蟪绦蛟O(shè)計(jì)的觀點(diǎn),有助于解決軟件的可重用性問(wèn)題,使程序結(jié)構(gòu)清晰,降低了編碼和維護(hù)的工作量。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)比如:假設(shè)有兩個(gè)類A和B,若類B繼承類A,則B包含了A的特征,同時(shí)可以加入自己所特有的新特征。我們稱被繼承類A為基類或父類;而稱繼承類B為A的派生類或子類。即類B是從類A中派生出來(lái)的。6、繼承從繼承源上分,繼承分為單繼承和多繼承。單繼承是指一個(gè)派生類只有單一的直接父類,類層次結(jié)構(gòu)為樹狀結(jié)構(gòu)。多繼承是指一個(gè)派生類可以有一個(gè)以上的直接父類,類層次結(jié)構(gòu)為網(wǎng)狀結(jié)構(gòu)。Java語(yǔ)言僅支持單繼承,C++語(yǔ)言支持單繼承和多繼承1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)7、多態(tài)性面向?qū)ο笙到y(tǒng)的多態(tài)性是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作。例如:有一個(gè)桌子類對(duì)象,還有一個(gè)棋子類對(duì)象,當(dāng)我們對(duì)他們發(fā)出“移動(dòng)”的消息時(shí),兩個(gè)類對(duì)象可以有不同的行為。一個(gè)程序中同名的不同方法共存,主要通過(guò)子類對(duì)父類方法的覆蓋來(lái)實(shí)現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)中有兩種多態(tài)性,即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過(guò)函數(shù)重載(包括運(yùn)算符重載)來(lái)實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)7、多態(tài)性面向?qū)ο笙到y(tǒng)的多態(tài)性是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作?!耙环N接口,多種方法”例如:有一個(gè)桌子類對(duì)象,還有一個(gè)棋子類對(duì)象,當(dāng)我們對(duì)他們發(fā)出“移動(dòng)”的消息時(shí),兩個(gè)類對(duì)象可以有不同的行為。一個(gè)程序中同名的不同方法共存,主要通過(guò)子類對(duì)父類方法的覆蓋來(lái)實(shí)現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)中有兩種多態(tài)性,即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過(guò)函數(shù)重載(包括運(yùn)算符重載)來(lái)實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語(yǔ)主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)類與對(duì)象C++語(yǔ)法1.2C++語(yǔ)法C++程序概貌C++的數(shù)據(jù)類型C++的變量與命名常量C++用戶自定義數(shù)據(jù)類型C++運(yùn)算符、表達(dá)式C++語(yǔ)句C++函數(shù)異常處理機(jī)制1.2C++語(yǔ)法一、C++程序概貌第一個(gè)C++程序Example_1.cpp1.2C++語(yǔ)法一、C++程序概貌1、ISO/ANSIC++頭文件1.2C++語(yǔ)法一、C++程序概貌2、命名空間1.2C++語(yǔ)法一、C++程序概貌2、命名空間命名空間是ANSIC++引入的可以由用戶命名的作用域,用來(lái)處理程序中常見(jiàn)的同名沖突。1.2C++語(yǔ)法一、C++程序概貌3、main()函數(shù)1.2C++語(yǔ)法一、C++程序概貌4、輸入和輸出一、C++程序概貌5、注釋1.2C++語(yǔ)法C++的注釋同C的注釋,有兩種:行注釋//塊注釋/**/二、C++數(shù)據(jù)類型1、整數(shù)類型——整型1.2C++語(yǔ)法二、C++數(shù)據(jù)類型1、整數(shù)類型——字符型1.2C++語(yǔ)法二、C++數(shù)據(jù)類型1、整數(shù)類型——布爾型1.2C++語(yǔ)法二、C++數(shù)據(jù)類型2、浮點(diǎn)類型1.2C++語(yǔ)法三、變量和命名常量1、標(biāo)識(shí)符1.2C++語(yǔ)法2、變量的聲明三、變量和命名常量1.2C++語(yǔ)法3、常量(Nameconstant)——字面常量三、變量和命名常量1.2C++語(yǔ)法3、常量(Nameconstant)——命名常量三、變量和命名常量1.2C++語(yǔ)法3、常量(Nameconstant)——命名常量三、變量和命名常量1.2C++語(yǔ)法4、易變變量和volatile關(guān)鍵字三、變量和命名常量1.2C++語(yǔ)法四、用戶自定義類型1.2C++語(yǔ)法五、C++運(yùn)算符1.2C++語(yǔ)法1、常用運(yùn)算符五、C++運(yùn)算符1.2C++語(yǔ)法2、動(dòng)態(tài)內(nèi)存分配和釋放運(yùn)算符:new和delete五、C++運(yùn)算符1.2C++語(yǔ)法3、類型轉(zhuǎn)換運(yùn)算符——隱式轉(zhuǎn)換五、C++運(yùn)算符1.2C++語(yǔ)法3、類型轉(zhuǎn)換運(yùn)算符——顯式轉(zhuǎn)換六、C++語(yǔ)句1.2C++語(yǔ)法1、簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句

2、流程控制語(yǔ)句

選擇,循環(huán),break,continue,goto,return七、函數(shù)1.2C++語(yǔ)法1、函數(shù)原型

七、函數(shù)1.2C++語(yǔ)法2、函數(shù)參數(shù)——傳值調(diào)用——參數(shù)不被改變——const——缺省參數(shù)

七、函數(shù)1.2C++語(yǔ)法3、函數(shù)返回值

七、函數(shù)1.2C++語(yǔ)法4、函數(shù)重載七、函數(shù)1.2C++語(yǔ)法5、內(nèi)聯(lián)函數(shù)七、函數(shù)1.2C++語(yǔ)法5、變量存儲(chǔ)方式七、函數(shù)1.2C++語(yǔ)法6、變量作用范圍八、異常處理機(jī)制1.2C++語(yǔ)法主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象與類C++語(yǔ)法一、類的構(gòu)成1.3類與對(duì)象類是C++對(duì)C中結(jié)構(gòu)的擴(kuò)展,類和對(duì)象是C++的重要特性,它們使得C++成為面向?qū)ο蟮木幊陶Z(yǔ)言。類是用戶自定義的類型,如果程序中要用到類,必須提前說(shuō)明,或者使用已存在的類(別人寫好的類、標(biāo)準(zhǔn)庫(kù)中的類等),C++語(yǔ)法本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容。類只是一個(gè)模板(Template),編譯后不占用內(nèi)存空間。C++中新增的關(guān)鍵字class,用來(lái)定義類。類的成員分兩部分:一部分對(duì)應(yīng)數(shù)據(jù)的狀態(tài),稱為成員變量,另一部分為作用于該數(shù)據(jù)狀態(tài)的函數(shù),稱為成員函數(shù)。成員變量和成員函數(shù),它們統(tǒng)稱為類的成員(Member)C++類成員的訪問(wèn)權(quán)限

private、protected和public稱為訪問(wèn)權(quán)限關(guān)鍵字private部分稱為類的私有部分,這一部分的數(shù)據(jù)成員和成員函數(shù)稱為類的私有成員。私有成員只能由本類的成員函數(shù)訪問(wèn),而類外部的任何訪問(wèn)都是非法的。public部分稱為類的公有部分,這部分的數(shù)據(jù)成員和成員函數(shù)稱為類的公有成員。公有成員可以由程序中的函數(shù)訪問(wèn),它對(duì)外是完全開放的。protected部分稱為類的保護(hù)部分,這部分的數(shù)據(jù)成員和成員函數(shù)稱為類的保護(hù)成員。保護(hù)成員可以由本類的成員函數(shù)訪問(wèn),也可以由本類的派生類的成員函數(shù)訪問(wèn),而類外的任何訪問(wèn)都是非法的。一、類的構(gòu)成1.3類與對(duì)象一、類的構(gòu)成1.3類與對(duì)象1、類的聲明一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(1)

普通成員函數(shù)形式即在類的聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫在類的外部。返回類型成員函數(shù)(參數(shù)列表);類外定義的一般形式是:返回類型類名∷成員函數(shù)名(參數(shù)表)

{

//函數(shù)體

}一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說(shuō)明有兩種格式將成員函數(shù)聲明為類的內(nèi)聯(lián)函數(shù):①隱式聲明:直接將函數(shù)聲明在類內(nèi)部。一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說(shuō)明有兩種格式將成員函數(shù)聲明為類的內(nèi)聯(lián)函數(shù):②顯式聲明:在類聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫在類的外部。為了使它起內(nèi)聯(lián)函數(shù)的作用,在成員函數(shù)返回類型前冠以關(guān)鍵字”inline”。這種成員函數(shù)在類外定義的一般形式是:inline

返回類型類名::成員函數(shù)名(參數(shù)表)

{

//函數(shù)體

}一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說(shuō)明注意:①使用inline說(shuō)明內(nèi)聯(lián)函數(shù)時(shí),必須使函數(shù)體和inline說(shuō)明結(jié)合在一起,否則編譯器將它作為普通函數(shù)處理。②通常只有較短的成員函數(shù)才定義為內(nèi)聯(lián)函數(shù),對(duì)較長(zhǎng)的成員函數(shù)最好作為一般函數(shù)處理。2、成員函數(shù)的聲明類的聲明和成員函數(shù)的定義都是類定義的一部分,在實(shí)際開發(fā)中,我們通常將類的聲明放在頭文件中,而將成員函數(shù)的定義放在源文件中。一、類的構(gòu)成1.3類與對(duì)象3、類封裝根據(jù)C++軟件設(shè)計(jì)規(guī)范,實(shí)際項(xiàng)目開發(fā)中的成員變量以及只在類內(nèi)部使用的成員函數(shù)(只被成員函數(shù)調(diào)用的成員函數(shù))都建議聲明為private,而只將允許通過(guò)對(duì)象調(diào)用的成員函數(shù)聲明為public。另外還有一個(gè)關(guān)鍵字protected,聲明為protected的成員在類外也不能通過(guò)對(duì)象訪問(wèn),但是在它的派生類內(nèi)部可以訪問(wèn),這點(diǎn)將在后續(xù)章節(jié)中介紹,現(xiàn)在只需要知道protected屬性的成員在類外無(wú)法訪問(wèn)即可。一、類的構(gòu)成1.3類與對(duì)象3、類封裝構(gòu)造函數(shù)和析構(gòu)函數(shù)都是類的成員函數(shù),但它們都是特殊的成員函數(shù),執(zhí)行特殊的功能,不用調(diào)用便自動(dòng)執(zhí)行,而且這些函數(shù)的名字與類的名字有關(guān)。C++語(yǔ)言中有一些成員函數(shù)性質(zhì)是特殊的,這些成員函數(shù)負(fù)責(zé)對(duì)象的建立、刪除。這些函數(shù)的特殊性在于可以由編譯器自動(dòng)地隱含調(diào)用,其中一些函數(shù)調(diào)用格式采用運(yùn)算符函數(shù)重載的語(yǔ)法。C++引進(jìn)一個(gè)自動(dòng)完成對(duì)象初始化過(guò)程的機(jī)制,這就是類的構(gòu)造函數(shù)。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)構(gòu)造函數(shù):特殊的成員函數(shù),它的名字和類名相同,沒(méi)有返回值,不需要用戶顯式調(diào)用(用戶也不能調(diào)用),而是在創(chuàng)建對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的調(diào)用是強(qiáng)制性的,一旦在類中定義了構(gòu)造函數(shù),那么創(chuàng)建對(duì)象時(shí)就一定要調(diào)用,不調(diào)用是錯(cuò)誤的。如果有多個(gè)重載的構(gòu)造函數(shù),那么創(chuàng)建對(duì)象時(shí)提供的實(shí)參必須和其中的一個(gè)構(gòu)造函數(shù)匹配;反過(guò)來(lái)說(shuō),創(chuàng)建對(duì)象時(shí)只有一個(gè)構(gòu)造函數(shù)會(huì)被調(diào)用。一個(gè)類必須有構(gòu)造函數(shù),要么用戶自己定義,要么編譯器自動(dòng)生成。一旦用戶自己定義了構(gòu)造函數(shù),不管有幾個(gè),也不管形參如何,編譯器都不再自動(dòng)生成。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)構(gòu)造函數(shù)一般格式:一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)它主要用于為對(duì)象分配空間,進(jìn)行初始化。成員變量的初始化順序與初始化列表中列出的變量的順序無(wú)關(guān),它只與成員變量在類中聲明的順序有關(guān)

。const用于類中成員變量時(shí),將類成員變?yōu)橹蛔x屬性(只讀:不能出現(xiàn)在“=”的左邊,但在類中仍可以用一個(gè)指針來(lái)修改其值。)所以不可以直接在類的構(gòu)造函數(shù)中初始化const的成員。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++析構(gòu)函數(shù)析構(gòu)函數(shù):在銷毀對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字和類名相同,而析構(gòu)函數(shù)的名字是在類名前面加一個(gè)~符號(hào)析構(gòu)函數(shù)(Destructor)也是一種特殊的成員函數(shù),沒(méi)有返回值。析構(gòu)函數(shù)沒(méi)有參數(shù),不能被重載,因此一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。如果用戶沒(méi)有定義,編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)的析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用并不是刪除對(duì)象,而是在對(duì)象被銷毀時(shí)調(diào)用完成一些清理工作。一、類的構(gòu)成1.3類與對(duì)象3、類封裝析構(gòu)函數(shù)的執(zhí)行時(shí)機(jī)在所有函數(shù)之外創(chuàng)建的對(duì)象是全局對(duì)象,它和全局變量類似,位于內(nèi)存分區(qū)中的全局?jǐn)?shù)據(jù)區(qū),程序在結(jié)束執(zhí)行時(shí)會(huì)調(diào)用這些對(duì)象的析構(gòu)函數(shù)。在函數(shù)內(nèi)部創(chuàng)建的對(duì)象是局部對(duì)象,它和局部變量類似,位于棧區(qū),函數(shù)執(zhí)行結(jié)束時(shí)會(huì)調(diào)用這些對(duì)象的析構(gòu)函數(shù)。new

創(chuàng)建的對(duì)象位于堆區(qū),通過(guò)delete

刪除時(shí)才會(huì)調(diào)用析構(gòu)函數(shù);如果沒(méi)有delete,析構(gòu)函數(shù)就不會(huì)被執(zhí)行。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++this指針this是C++中的一個(gè)關(guān)鍵字,一個(gè)const指針,它指向當(dāng)前對(duì)象,通過(guò)它可以訪問(wèn)當(dāng)前對(duì)象的所有成員。this只能用在類的內(nèi)部,通過(guò)this可以訪問(wèn)類的所有成員,包括private、protected、public屬性的。this雖然用在類的內(nèi)部,但是只有在對(duì)象被創(chuàng)建以后才會(huì)給this賦值。this只能在成員函數(shù)內(nèi)部使用,用在其他地方?jīng)]有意義,也是非法的。this作為隱式形參,本質(zhì)上是成員函數(shù)的局部變量,所以只能用在成員函數(shù)的內(nèi)部,并且只有在通過(guò)對(duì)象調(diào)用成員函數(shù)時(shí)才給this賦值一、類的構(gòu)成1.3類與對(duì)象二、對(duì)象定義和使用1.3類與對(duì)象在C++中,類也是一種用戶自定義數(shù)據(jù)類型,類的對(duì)象可以看成是該類類型的一個(gè)實(shí)例,定義一個(gè)對(duì)象和定義一個(gè)變量相似。類與對(duì)象間的關(guān)系,可以用數(shù)據(jù)類型int和整型變量i之間的關(guān)系類比。C++把類的變量叫做類的對(duì)象,對(duì)象也稱為類的實(shí)例。1、對(duì)象定義對(duì)象的定義,也稱對(duì)象的創(chuàng)建,在C++中可以用以下兩種方法定義對(duì)象:(1)在聲明類的同時(shí),直接定義對(duì)象。二、對(duì)象定義和使用1.3類與對(duì)象1、對(duì)象定義對(duì)象的定義,也稱對(duì)象的創(chuàng)建,在C++中可以用以下兩種方法定義對(duì)象:(2)聲明了類之后,在使用時(shí)再定義對(duì)象二、對(duì)象定義和使用1.3類與對(duì)象1、對(duì)象定義說(shuō)明:在聲明類的同時(shí)定義的對(duì)象是一種全局對(duì)象,在它的生存期內(nèi)任何函數(shù)都可以使用它。聲明了一個(gè)類便聲明了一種類型,它并不接收和存儲(chǔ)具體的值,只作為生成具體對(duì)象的一種“模板”,只有定義了對(duì)象后,系統(tǒng)才為對(duì)象分配存儲(chǔ)空間。1、對(duì)象定義根據(jù)C++類封裝形式,利用構(gòu)造函數(shù)創(chuàng)建對(duì)象。(1)利用構(gòu)造函數(shù)直接創(chuàng)建對(duì)象。其一般形式為:

類名對(duì)象名[(實(shí)參表)];這里的“類名”與構(gòu)造函數(shù)名相同,“實(shí)參表”是為構(gòu)造函數(shù)提供的實(shí)際參數(shù)。(2)利用構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),通過(guò)指針和new來(lái)實(shí)現(xiàn)。其一般語(yǔ)法形式為:

類名*指針變量=new類名[(實(shí)參表)];二、對(duì)象定義和使用1.3類與對(duì)象二、對(duì)象定義和使用1.3類與對(duì)象2、對(duì)象中成員的訪問(wèn)當(dāng)定義了一個(gè)類的對(duì)象后,就可以訪問(wèn)對(duì)象的成員了。在類的外部可以通過(guò)類的對(duì)象對(duì)公有成員進(jìn)行訪問(wèn),訪問(wèn)對(duì)象成員要使用操作符“.”,其中“.”叫做對(duì)象選擇符,簡(jiǎn)稱點(diǎn)運(yùn)算符。訪問(wèn)的一般形式是:對(duì)象名.數(shù)據(jù)成員名對(duì)象名.成員函數(shù)名(參數(shù)表)對(duì)象名.成員名實(shí)際上是一種縮寫形式,它表達(dá)的意義是:

對(duì)象名.類名::成員名在定義對(duì)象時(shí),若定義的是指向?qū)ο蟮闹羔?,則訪問(wèn)此對(duì)象的成員時(shí),要用“->”操作符。二、對(duì)象定義和使用1.3類與對(duì)象3、對(duì)象賦值語(yǔ)句兩個(gè)同類型的變量之間可以相互賦值。同類型的對(duì)象間也可以進(jìn)行賦值,當(dāng)一個(gè)對(duì)象賦值給另一個(gè)對(duì)象時(shí),所有的數(shù)據(jù)成員都會(huì)逐位拷貝。說(shuō)明:在使用對(duì)象賦值語(yǔ)句進(jìn)行對(duì)象賦值時(shí),兩個(gè)對(duì)象的類型必須相同,如果對(duì)象的類型不同,編譯時(shí)將出錯(cuò)。兩個(gè)對(duì)象之間的賦值,僅僅使這些對(duì)象中數(shù)據(jù)成員相同,而兩個(gè)對(duì)象仍是分離的。對(duì)象賦值是通過(guò)缺省的賦值運(yùn)算符函數(shù)實(shí)現(xiàn)的。當(dāng)類中存在指針時(shí),使用缺省的賦值運(yùn)算符進(jìn)行對(duì)象賦值,可能會(huì)產(chǎn)生錯(cuò)誤。案例1:1.3類與對(duì)象運(yùn)行結(jié)果:

小明的年齡是15,成績(jī)是92.5案例2:1.3類與對(duì)象有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:(1)12,25,30;(2)15,30,21。求它們的體積。要求:編一個(gè)基于對(duì)象的程序。案例3:1.3類與對(duì)象第一步:類聲明第二步:定義函數(shù)有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:(1)12,25,30;(2)15,30,21。求它們的體積。要求:編一個(gè)基于對(duì)象的程序。案例3:1.3類與對(duì)象第三步:主函數(shù)

面向?qū)ο蟪绦蛟O(shè)計(jì)概念及相關(guān)術(shù)語(yǔ)C++語(yǔ)法知識(shí)。類與對(duì)象的定義和聲明。

小結(jié)

什么是類,什么是對(duì)象,類與對(duì)象的關(guān)聯(lián)?面向?qū)ο蟪绦蛟O(shè)計(jì)的三要素?舉例說(shuō)明類的聲明與初始化。作業(yè)QtC++第二章

Qt概述主要內(nèi)容1324Qt與嵌入式簡(jiǎn)介Qt介紹Qt安裝Qt應(yīng)用程序設(shè)計(jì)Qt是一個(gè)1991年由奇趣科技(Trolltech)開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。比如控制臺(tái)工具和服務(wù)器。2008年,奇趣科技被諾基亞公司收購(gòu),QT也因此成為諾基亞旗下的編程語(yǔ)言工具。

2012年諾基亞將QT業(yè)務(wù)賣給Digia公司,但是,由于Android本身支持Java,iOS本身支持Objective-C和Swift,所以Qt在移動(dòng)端的貢獻(xiàn)寥寥無(wú)幾,Qt主要用于桌面程序開發(fā)和嵌入式開發(fā)。2013年之后,Qt

是一個(gè)跨平臺(tái)的C++應(yīng)用程序框架,支持Windows、Linux、MacOSX、Android、iOS、WindowsPhone、嵌入式系統(tǒng)等。也就是說(shuō),Qt

可以同時(shí)支持桌面應(yīng)用程序開發(fā)、嵌入式開發(fā)和移動(dòng)開發(fā),覆蓋了現(xiàn)有的所有主流平臺(tái)。只需要編寫一次代碼,發(fā)布到不同平臺(tái)前重新編譯即可。一、Qt介紹3.

Qt

不僅僅是一個(gè)GUI庫(kù),它除了可以創(chuàng)建漂亮的界面,還有很多其他組件,

Qt

是應(yīng)用程序開發(fā)的一站式解決方案!Qt

雖然龐大,封裝較深,但它的速度并不慢,雖不及MFC,但比Java、C#要快。Qt

程序最終會(huì)編譯成本地代碼,而不是依托虛擬機(jī)。4.獨(dú)立安裝:Qt程序最終會(huì)編譯為本地代碼,不需要其他庫(kù)的支撐,而Java要安裝虛擬機(jī),C#要安裝.NETFramework。

一、Qt介紹5.

Qt可以做什么:使用Qt開發(fā)的程序非常多。1997年,Qt被用來(lái)開發(fā)Linux桌面環(huán)境KDE,大獲成功,使Qt成為L(zhǎng)inux環(huán)境下開發(fā)C++GUI程序的事實(shí)標(biāo)準(zhǔn)。Linux也是嵌入式的主力軍,廣泛應(yīng)用于消費(fèi)類電子、工業(yè)控制、軍工電子、電信/網(wǎng)絡(luò)/通訊、航空航天、汽車電子、醫(yī)療設(shè)備、儀器儀表等相關(guān)行業(yè),這些地方都有Qt的影子。用Qt開發(fā)的程序下面的程序都使用

Qt

開發(fā)WPS、YY語(yǔ)音、Skype、豆瓣電臺(tái)、蝦米音樂(lè)、淘寶助理、千牛、暴雪的戰(zhàn)網(wǎng)客戶端、VirtualBox、Opera、咪咕音樂(lè)、Google地圖、AdobePhotoshopAlbum

等。

一、Qt介紹6.Qt擴(kuò)展C++:標(biāo)準(zhǔn)C++對(duì)象模型為面向?qū)ο缶幊烫峁┝擞行У膶?shí)時(shí)支持,但是它的靜態(tài)特性在一些領(lǐng)域中表現(xiàn)的不夠靈活。GUI應(yīng)用程序往往對(duì)實(shí)時(shí)性和靈活性都有著很高的要求。Qt通過(guò)其改進(jìn)的對(duì)象模型在保持C++執(zhí)行速度的同時(shí)提供了所需要的靈活性。面向?qū)ο筇卣鳌猀t的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來(lái)說(shuō)是非常方便的。Qt提供了一種稱為signals/slots

的安全類型來(lái)替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單、靈活。

Qt和C++關(guān)系?一、Qt介紹二、Qt模塊1.Qt模塊組成:Qt的基本模塊Qt設(shè)計(jì)器圖標(biāo)視圖模塊工作區(qū)模塊OpenGL三維圖形模塊網(wǎng)絡(luò)模塊畫布模塊表格模塊XML模塊SQL模塊庫(kù)描述QtCore核心非GUI功能QtGui核心GUI功能QtNetwork網(wǎng)絡(luò)模塊QtOpenGLOpenGL模塊QtSqlSQL模塊QtSvgSVG透視圖類QtXmlXML模塊Qt3Support支持Qt3的類QAxContainerActiveQt

客戶端的擴(kuò)充QAxServerActiveQt

服務(wù)器段的擴(kuò)充QtAssistantQt助手的語(yǔ)言類QtDesignerQt設(shè)計(jì)器的擴(kuò)展類QtUiTools生成動(dòng)態(tài)GUI類QtTest單元測(cè)試工具類2.Qt庫(kù):二、Qt模塊Qt通過(guò)模塊化分主要功能各個(gè)不同的模塊又通過(guò)一系列的類實(shí)現(xiàn)具體功能。各個(gè)子類之間通過(guò)繼承關(guān)系進(jìn)行聯(lián)系主要內(nèi)容1324Qt與嵌入式簡(jiǎn)介Qt介紹Qt安裝Qt應(yīng)用程序設(shè)計(jì)版本介紹Qt安裝包:qt-opensource-windows-x86-mingw492-5.12.12.exe

opensource表示開源版本windows-x86表示W(wǎng)indows32位平臺(tái)Mingw表示使用MinGW編譯器5.12.12表示當(dāng)前版本號(hào)一、Qt安裝注意安裝路徑中不能有中文安裝開始是否登錄或者注冊(cè)Qt賬號(hào),不影響程序的安裝,可以直接跳過(guò)。在選擇組件界面,可以選擇安裝一些模塊,建議保持默認(rèn)選擇。一、Qt安裝一、Qt安裝Qt經(jīng)過(guò)這么多年的發(fā)展,已經(jīng)發(fā)展成為一個(gè)完整的基于C++語(yǔ)言的跨平臺(tái)的桌面應(yīng)用程序開發(fā)解決方案。1、windows下的QtCreator安裝2、linux下的Qt安裝說(shuō)明:Windows下Qt可使用的編譯器有兩種,一種是MinGW版本,其在下載的Qt安裝程序中自帶的,直接在Qt的官網(wǎng)上,下載Qt對(duì)應(yīng)的版本,進(jìn)行安裝即可使用;MinGW就是MinimalistGNUForWindows,是GNU開發(fā)工具移植到Win32平臺(tái)下的產(chǎn)物,是一套Windows上的GNU工具集,用其開發(fā)的程序不需要額外的第三方DLL支持就可以直接在Windows下運(yùn)行。另一種是MSVC版本,是使用VisualC++作為編譯器,使用此編譯器時(shí),需要先安裝VisualStudio,再安裝Qt。二、Qt編譯環(huán)境交叉編譯環(huán)境QtforEmbeddedLinux系統(tǒng)QtEmbeddedforARM體系——基于ARM的嵌入式Linux交叉編譯環(huán)境交叉編譯器——arm-linux-gccQtforEmeddedLinux安裝——交叉編譯器和嵌入式環(huán)境建立forPC的編譯forARM的編譯三、Qt應(yīng)用Window下:1、創(chuàng)建工程2、編寫源程序3、編譯4、運(yùn)行Linux下:1、編寫源程序2、創(chuàng)建工程qmake-project3、生成makefile文件qmake4、編譯make5、運(yùn)行./ARM下運(yùn)行:1、編寫源程序2、創(chuàng)建工程/usr/local/bin/qmake-project3、生成makefile文件/usr/local/bin/qmake4、編譯make5、運(yùn)行./主要內(nèi)容1324Qt與嵌入式簡(jiǎn)介Qt介紹Qt安裝Qt應(yīng)用程序設(shè)計(jì)1、創(chuàng)建工程:2、編輯工程:編輯界面建立信號(hào)與槽的連接添加槽函數(shù)及實(shí)現(xiàn)功能3、編譯運(yùn)行一、QtCreator使用二、QtCreator圖形界面三、Qt程序結(jié)構(gòu)三、Qt程序結(jié)構(gòu)三、Qt程序結(jié)構(gòu)三、Qt程序結(jié)構(gòu)四、Qt程序設(shè)計(jì)主要內(nèi)容1324Qt與嵌入式簡(jiǎn)介Qt介紹Qt安裝Qt應(yīng)用程序設(shè)計(jì)

嵌入式系統(tǒng)簡(jiǎn)介嵌入式系統(tǒng)的定義嵌入式系統(tǒng)組成嵌入式處理器嵌入式操作系統(tǒng)嵌入式系統(tǒng)發(fā)展趨勢(shì)嵌入式系統(tǒng)軟件設(shè)計(jì)目前國(guó)內(nèi)一個(gè)普遍被認(rèn)同的定義是:“以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)?!?。是將應(yīng)用程序、操作系統(tǒng)和計(jì)算機(jī)硬件集成在一起的系統(tǒng)(技術(shù)角度)嵌入式系統(tǒng)集系統(tǒng)的應(yīng)用軟件與硬件于一體,類似于PC中BIOS的工作方式,具有軟件代碼小、高度自動(dòng)化、響應(yīng)速度快等特點(diǎn),特別適合于要求實(shí)時(shí)和多任務(wù)的體系。(系統(tǒng)角度)廣義定義任何一個(gè)非計(jì)算機(jī)的計(jì)算系統(tǒng)一、嵌入式系統(tǒng)的定義

基本要素嵌入式處理器系統(tǒng)嵌入式處理器各種類型存儲(chǔ)器模擬電路及電源接口控制器及接插件嵌入式軟件系統(tǒng)實(shí)時(shí)操作系統(tǒng)(RTOS)板級(jí)支持包(BSP)設(shè)備驅(qū)動(dòng)(DeviceDriver)協(xié)議棧(ProtocolStack)應(yīng)用程序(Application)二、嵌入式系統(tǒng)的組成二、嵌入式系統(tǒng)的組成嵌入式系統(tǒng)一般由嵌入式硬件和軟件組成硬件以微處理器為核心集成存儲(chǔ)器和系統(tǒng)專用的輸入/輸出設(shè)備軟件包括:初始化代碼及驅(qū)動(dòng)、嵌入式操作系統(tǒng)和應(yīng)用程序等,這些軟件有機(jī)地結(jié)合在一起,形成系統(tǒng)特定的一體化軟件。處理器存儲(chǔ)器輸入接口操作系統(tǒng)(協(xié)議棧)應(yīng)用程序軟件子系統(tǒng)硬件子系統(tǒng)輸出接口外圍設(shè)備二、嵌入式系統(tǒng)的組成嵌入式系統(tǒng)軟件組成二、嵌入式系統(tǒng)的組成嵌入式系統(tǒng)軟件組成二、嵌入式系統(tǒng)的組成三、嵌入式處理器1.ARM處理器2.MIPS處理器3.PowerPC處理器4.MC68K/Coldfire處理器5.x86處理器三、典型的嵌入式處理器四、嵌入式操作系統(tǒng)按收費(fèi)模式劃分商用型Vxworks,Nucleux,PlamOS,Symbian,WinCE,QNX,pSOS,VRTX,LynxOS,Hopen,DeltaOS免費(fèi)型Linux,μCLinux,μC/OS-Ⅱ,eCos,uITRON按實(shí)時(shí)性劃分硬實(shí)時(shí)Vxworks軟實(shí)時(shí)WinCE,RTLinux,Android無(wú)實(shí)時(shí)EmbeddedLinux五、嵌入式系統(tǒng)技術(shù)發(fā)展趨勢(shì)軟件設(shè)計(jì)比重日益突出組件設(shè)計(jì)技術(shù)(模塊設(shè)計(jì))SOC(IP核、GPU等)硬件軟件化(FPGA等)嵌入式系統(tǒng)開發(fā)的工作重點(diǎn)正在向軟件轉(zhuǎn)移。如:以機(jī)械控制系統(tǒng)為例,10年前機(jī)械、硬件和軟件在機(jī)電系統(tǒng)中所占的比重分別是65%、20%和15%,而在EMS中則是30%、15%和55%。嵌入式系統(tǒng)軟件開發(fā)的特點(diǎn):實(shí)時(shí)性模塊化組件化可重用五、嵌入式系統(tǒng)技術(shù)發(fā)展趨勢(shì)基于組件的嵌入式系統(tǒng)軟件開發(fā)的優(yōu)點(diǎn)1、可以選用商業(yè)成熟的軟件組件2、可以重用以往經(jīng)過(guò)測(cè)試的高可靠性軟件模塊3、提高軟件質(zhì)量、縮短產(chǎn)品面市時(shí)間4、降低成本、減少費(fèi)用五、嵌入式系統(tǒng)技術(shù)發(fā)展趨勢(shì)

可編程芯片在嵌入式系統(tǒng)設(shè)計(jì)中的應(yīng)用促進(jìn)了硬件設(shè)計(jì)向軟件設(shè)計(jì)發(fā)展:對(duì)象:FPGA,CPLD,ASIC工具:VHDL,veilog編程:硬件工程師五、嵌入式系統(tǒng)技術(shù)發(fā)展趨勢(shì)嵌入式系統(tǒng)與通用計(jì)算機(jī)系統(tǒng)的差別:人機(jī)交互界面有限的功能時(shí)間關(guān)鍵性和穩(wěn)定性六、嵌入式系統(tǒng)開發(fā)特點(diǎn)系統(tǒng)總體開發(fā)處理器選型,需要在成本和性能上做出選擇開發(fā)環(huán)境的選擇,包括嵌入式操作系統(tǒng)的選擇以及開發(fā)工具的選擇等嵌入式軟件開發(fā)交叉編譯交叉調(diào)試六、嵌入式系統(tǒng)開發(fā)特點(diǎn)

嵌入式軟件開發(fā)的特點(diǎn):需要交叉開發(fā)環(huán)境:交叉開發(fā)環(huán)境是指實(shí)現(xiàn)編譯、鏈接和調(diào)試應(yīng)用程序代碼的環(huán)境。與運(yùn)行應(yīng)用程序的環(huán)境不同,它分散在有通信連接的宿主機(jī)與目標(biāo)機(jī)環(huán)境之中。宿主機(jī)(Host)是一臺(tái)通用計(jì)算機(jī),一般是PC機(jī)。它通過(guò)串口或網(wǎng)絡(luò)連接與目標(biāo)機(jī)通信。目標(biāo)機(jī)(Target)可以是嵌入式應(yīng)用軟件的實(shí)際運(yùn)行環(huán)境,也可以是能替代實(shí)際環(huán)境的仿真系統(tǒng)。作業(yè)1.簡(jiǎn)述Qt應(yīng)用程序的創(chuàng)建步驟?2.簡(jiǎn)述Qt應(yīng)用程序?qū)τ赑C機(jī)和ARM上編譯過(guò)程?3.簡(jiǎn)述Qt、C++及C的關(guān)系?QtC++第三章信號(hào)與槽主要內(nèi)容132信號(hào)與槽的概念信號(hào)與槽的應(yīng)用信號(hào)與槽定義1、信號(hào)和槽通信機(jī)制信號(hào)槽機(jī)制與Windows下消息機(jī)制類似,消息機(jī)制是基于回調(diào)函數(shù),Qt中用信號(hào)與槽來(lái)代替函數(shù)指針,使程序更安全簡(jiǎn)潔?;卣{(diào)是指一個(gè)函數(shù)的指針,如果希望一個(gè)處理函數(shù)通知一些事件,可以把另一個(gè)函數(shù)的指針傳遞給處理函數(shù)?;卣{(diào)方式實(shí)現(xiàn)對(duì)象間的通訊有兩個(gè)主要缺點(diǎn),首先回調(diào)函數(shù)不是類型安全的,不能確定處理函數(shù)使用了正確的參數(shù)來(lái)調(diào)用回調(diào)函數(shù),第二,回調(diào)函數(shù)和處理函數(shù)間的聯(lián)系非常緊密,因?yàn)樘幚砗瘮?shù)必須知道要調(diào)用哪個(gè)回調(diào)函數(shù)。3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介1、信號(hào)和槽通信機(jī)制信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,信號(hào)和槽機(jī)制是Qt的核心機(jī)制,可以讓編程人員將互不相關(guān)的對(duì)象綁定在一起,實(shí)現(xiàn)對(duì)象之間的通信,也是Qt區(qū)別于其它工具包的重要地方。信號(hào)和槽是Qt自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C++語(yǔ)言,因此要正確的處理信號(hào)和槽,必須借助一個(gè)稱為

moc(MetaObjectCompiler)的Qt工具,該工具是一個(gè)C++預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼。3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介一個(gè)頭文件中包含了宏Q_OBJECT,則生成另外一個(gè)C++源文件,這個(gè)新的文件名字將會(huì)是原文件名前面加上moc_構(gòu)成。這個(gè)新文件同樣將進(jìn)入編譯系統(tǒng),最終被鏈接到二進(jìn)制代碼中。moc通過(guò)解析帶有signals和slots關(guān)鍵字的類定義等1、信號(hào)和槽通信機(jī)制信號(hào)和槽機(jī)制就是:當(dāng)一個(gè)特定的事件發(fā)生時(shí),一個(gè)或幾個(gè)被指定的信號(hào)就被發(fā)射,槽就是一個(gè)返回值為void的函數(shù),如果存在一個(gè)或幾個(gè)槽和該信號(hào)相連接,那在該信號(hào)被發(fā)射后,這個(gè)(些)槽(函數(shù))就會(huì)立刻被執(zhí)行。信號(hào)和槽是很寬松的聯(lián)系在一起的,可以使用任何數(shù)量、類型的參數(shù),是類型安全的。3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介1、信號(hào)和槽通信機(jī)制從QObject類或者它的某個(gè)子類繼承的所有類都可以包含信號(hào)和槽。當(dāng)某個(gè)事件發(fā)生后,被指定的信號(hào)就會(huì)被發(fā)射(emit),它不知道也沒(méi)有必要知道是否有槽連接了該信號(hào),這就是信息封裝。槽是可以用來(lái)接收信號(hào)的正常的對(duì)象的成員函數(shù),一個(gè)槽不知道它是否被其它信號(hào)連接。所以,對(duì)象之間并不了解具體的通信機(jī)制。3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介2、信號(hào)與槽通信方式:可以把一個(gè)信號(hào)和一個(gè)槽進(jìn)行單獨(dú)連接,這時(shí)槽會(huì)因?yàn)樵撔盘?hào)被發(fā)射而被執(zhí)行;(一對(duì)一)也可以把幾個(gè)信號(hào)連接在同一個(gè)槽上,這樣任何一個(gè)信號(hào)被發(fā)射都會(huì)使得該槽被執(zhí)行;(多對(duì)一)也可以把一個(gè)信號(hào)和多個(gè)槽連接在一起,這樣該信號(hào)一旦被發(fā)射,與之相連接的槽都會(huì)被馬上執(zhí)行,但執(zhí)行的順序不確定,也不可以指定;(一對(duì)多)也可以把一個(gè)信號(hào)和另一個(gè)信號(hào)進(jìn)行連接,這樣,只要第一個(gè)信號(hào)被發(fā)射,第二個(gè)信號(hào)立刻就被發(fā)射。

(一對(duì)一)3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介2、信號(hào)與槽通信方式:3.1信號(hào)與槽的概念一信號(hào)與槽簡(jiǎn)介1、信號(hào)與槽關(guān)聯(lián)函數(shù):通過(guò)調(diào)用QObject對(duì)象的connect函數(shù)來(lái)將某個(gè)對(duì)象的信號(hào)與另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號(hào)時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:QObject::connect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*method,Qt::ConnectionTypetype=Qt::AutoConnection)函數(shù)的作用就是將發(fā)射者sender對(duì)象中的信號(hào)signal與接收者receiver中的member槽函數(shù)聯(lián)系起來(lái)。3.1信號(hào)與槽的概念二信號(hào)與槽關(guān)聯(lián)2、信號(hào)與槽關(guān)聯(lián)函數(shù):QObject::connect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*method,Qt::ConnectionTypetype=Qt::AutoConnection)send是信號(hào)的發(fā)送者,必須是一個(gè)QObject類對(duì)象。singal就是一個(gè)信號(hào),Qt本身提供了一些信號(hào)。例如按鈕的clicked();對(duì)話框的accept()、reject()等等。receiver是信號(hào)的接收者,必須是一個(gè)QObject類對(duì)象。method是槽函數(shù)。例如:3.1信號(hào)與槽的概念二信號(hào)與槽關(guān)聯(lián)QObject::connect(pushbutton,SIGNAL(clicked),label,SLOT(on_btn_slot()));2、信號(hào)與槽關(guān)聯(lián)方式:type定義了信號(hào)與槽的關(guān)聯(lián)方式;Qt::DirectConnection:信號(hào)發(fā)出去,等待槽函數(shù)返回才能繼續(xù)執(zhí)行之后的代碼;Qt::QueuedConnection:信號(hào)發(fā)出去,"就不管了",立即執(zhí)行發(fā)送信號(hào)之后的代碼;Qt::AutoConnection相當(dāng)于上面2個(gè)方式結(jié)合起來(lái),當(dāng)信號(hào)與槽在同一線程時(shí),等同于Qt::DirectConnection;而在不同線程,效果等同于Qt::QueuedConnection。3.1信號(hào)與槽的概念二信號(hào)與槽關(guān)聯(lián)主要內(nèi)容132信號(hào)與槽的概念信號(hào)與槽的應(yīng)用信號(hào)與槽定義1、信號(hào)概念:當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射(emit)出去,而且對(duì)象只負(fù)責(zé)發(fā)送信號(hào),它不知道另一端是誰(shuí)在接收這個(gè)信號(hào)。這樣就做到了真正的信息封裝,能確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。3.2信號(hào)與槽的定義一信號(hào)2、信號(hào)聲明:信號(hào)的聲明是在頭文件中進(jìn)行的,QT的signals關(guān)鍵字指出進(jìn)入了信號(hào)聲明區(qū),隨后即可聲明自己的信號(hào)。例如,下面定義了三個(gè)信號(hào):3.2信號(hào)與槽的定義一信號(hào)signals:voidmySignal();voidmySignal(intx);voidmySignalParam(int

x,inty);2、信號(hào)聲明:signals

是QT的關(guān)鍵字,而非C/C++的。

voidmySignal()定義了信號(hào)mySignal,這個(gè)信號(hào)沒(méi)有攜帶參數(shù);voidmySignal(intx)定義了重名信號(hào)mySignal,但是它攜帶一個(gè)整形參數(shù),這有點(diǎn)類似于C++中的虛函數(shù)。從形式上講信號(hào)的聲明與普通的C++函數(shù)是一樣的,但是信號(hào)卻沒(méi)有函數(shù)體定義;信號(hào)的返回類型都是void。3.2信號(hào)與槽的定義一信號(hào)signals:voidmySignal();voidmySignal(intx);voidmySignalParam(int

x,inty);1、槽概念:用于接收信號(hào),而且槽只是普通的對(duì)象成員函數(shù)。槽是普通的C++成員函數(shù),可以被正常調(diào)用,它們唯一的特殊性就是很多信號(hào)可以與其相關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號(hào)被發(fā)射時(shí),這個(gè)槽就會(huì)被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。一個(gè)槽并不知道是否有任何信號(hào)與自己相連接。而且對(duì)象并不了解具體的通信機(jī)制。——信息封裝3.2信號(hào)與槽的定義二槽2、槽權(quán)限:槽是普通的成員函數(shù),與其它的函數(shù)一樣,它們也有存取權(quán)限。槽的存取權(quán)限決定了誰(shuí)能夠與其相關(guān)聯(lián)。同普通的C++成員函數(shù)一樣,槽函數(shù)也分為三種類型,即publicslots、privateslots和protectedslots。3.2信號(hào)與槽的定義二槽2、槽權(quán)限:publicslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著任何對(duì)象都可將信號(hào)與之相連接。這對(duì)于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對(duì)象,將它們的信號(hào)與槽進(jìn)行連接以便信息能夠正確的傳遞。protectedslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著當(dāng)前類及其子類可以將信號(hào)與之相連接。這適用于那些槽,它們是類實(shí)現(xiàn)的一部分,但是其界面接口卻面向外部。privateslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著只有類自己可以將信號(hào)與之相連接。這適用于聯(lián)系非常緊密的類。3.2信號(hào)與槽的定義二槽3、槽的聲明:槽的聲明也是在頭文件中進(jìn)行的,槽也能夠聲明為虛函數(shù)。例如,下面聲明了三個(gè)槽:3.2信號(hào)與槽的定義二槽publicslots:voidmySlot();voidmySlot(intx);voidmySignalParam(int

x,inty);通過(guò)調(diào)用QObject對(duì)象的connect函數(shù)來(lái)將某個(gè)對(duì)象的信號(hào)與另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號(hào)時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:這個(gè)函數(shù)的作用就是將發(fā)射者sender對(duì)象中的信號(hào)signal與接收者receiver中的member槽函數(shù)聯(lián)系起來(lái)。3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式bool

QObject::connect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*member)[static]信號(hào)與槽的關(guān)聯(lián)方式有五種,第一種是常規(guī)的用法:當(dāng)指定信號(hào)signal時(shí)必須使用QT的宏SIGNAL(),當(dāng)指定槽函數(shù)時(shí)必須使用宏SLOT()。3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式connect(ui->lineEdit,SIGNAL(textChanged(constQString&)),ui->label,SLOT(setText(constQString&));第一種是常規(guī)的用法:下面定義了兩個(gè)對(duì)象:標(biāo)簽對(duì)象label和滾動(dòng)條對(duì)象scroll,并將valueChanged()信號(hào)與標(biāo)簽對(duì)象的setNum()相關(guān)聯(lián),另外信號(hào)還攜帶了一個(gè)整形參數(shù),這樣標(biāo)簽總是顯示滾動(dòng)條所處位置的值。QLabel*label=newQLabel;

QScrollBar*scroll=newQScrollBar;

QObject::connect(scroll,SIGNAL(valueChanged(int)),label,SLOT(setNum(int)));3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式第一種是常規(guī)的用法:第二種是基于函數(shù)指針的重載形式這是Qt5及之后加入的一種重載形式。該函數(shù)的定義如下:3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式QObject::connect(constQObject*sender,PointerToMemberFunctionsignal,constQObject*receiver,PointerToMemberFunctionmethod,Qt::ConnectionTypetype=Qt::AutoConnection)connect(ui->lineEdit,&QLineEdit::textChanged,ui->label,&QLabel::setText);第二種是基于函數(shù)指針的重載形式使用這種方式與前一種相比,好處就是可以在編譯時(shí)進(jìn)行語(yǔ)法檢查,比如信號(hào)或槽的拼寫錯(cuò)誤、槽函數(shù)參數(shù)數(shù)目多于信號(hào)的參數(shù)數(shù)目等錯(cuò)誤,在編譯時(shí)就能夠被發(fā)現(xiàn),所以在Qt5中建議使用這種關(guān)聯(lián)形式。但是,這種方式依然不能連接到重載的信號(hào)和槽函數(shù),如果連接重載信號(hào)和槽函數(shù),還是會(huì)報(bào)錯(cuò)誤,即就是不能以參數(shù)區(qū)分信號(hào)和槽,這是其缺陷。3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式第三種是應(yīng)用C++11lambda表達(dá)式connect函數(shù)支持C++11中的lambda表達(dá)式,可以在關(guān)聯(lián)時(shí)直接編寫信號(hào)發(fā)射后要執(zhí)行的代碼。其中[capture](parameters)mutable->return-type{statement}就是Lambda函數(shù)。3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式QObject::connect(constQObject*sender,PointerToMemberFunctionsignal,constQObject*receiver,[capture](parameters)mutable->return-type{statement})第三種是應(yīng)用C++11lambda表達(dá)式3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式connect(ui->btn,&QPushButton::clicked,[=](){

ui->textBrowser->setText("這是Lambda方式連接到槽函數(shù)!");});如果槽函數(shù)中的內(nèi)容比較簡(jiǎn)單的話,不用再單獨(dú)定義一個(gè)槽來(lái)連接,直接用Lambda函數(shù)會(huì)更簡(jiǎn)單。

3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式第四種是方式在ui界面轉(zhuǎn)到槽3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式第五種是方式在ui界面編輯信號(hào)和槽3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式綜合應(yīng)用案例:當(dāng)信號(hào)與槽沒(méi)有必要繼續(xù)保持關(guān)聯(lián)時(shí),可以使用disconnect函數(shù)來(lái)斷開連接。其定義如下:這個(gè)函數(shù)斷開發(fā)射者中的信號(hào)與接收者中的槽函數(shù)之間的關(guān)聯(lián)。

3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式bool

QObject::disconnect(constQObject*sender,constchar*signal,

constObject*receiver,constchar*member)[static]有三種情況必須使用disconnect()函數(shù):斷開與某個(gè)對(duì)象相關(guān)聯(lián)的任何對(duì)象。disconnect(myObject,0,0,0)或者

myObject->disconnect()斷開與某個(gè)特定信號(hào)的任何關(guān)聯(lián)。disconnect(myObject,SIGNAL(mySignal()),0,0)或者

myObject->disconnect(SIGNAL(mySignal()))斷開兩個(gè)對(duì)象之間的關(guān)聯(lián)。

disconnect(myObject,0,myReceiver,0)或者

myObject->disconnect(myReceiver)注意:在disconnect函數(shù)中0可以用作一個(gè)通配符,分別表示任何信號(hào)、任何接收對(duì)象、接收對(duì)象中的任何槽函數(shù)。但是發(fā)射者sender不能為0,其它三個(gè)參數(shù)的值可以等于0。3.2信號(hào)與槽的定義三信號(hào)與槽的關(guān)聯(lián)方式3.2信號(hào)與槽的定義四程序舉例-13.2信號(hào)與槽的定義四程序舉例-23.2信號(hào)與槽的定義四程序舉例-23.2信號(hào)與槽的定義五注意問(wèn)題信號(hào)與槽機(jī)制是比較靈活的,但有些局限性必須了解,這樣在實(shí)際的使用過(guò)程中做到有的放矢,避免產(chǎn)生一些錯(cuò)誤。1.信號(hào)與槽的效率是非常高的,但是同真正的回調(diào)函數(shù)比較起來(lái),由于增加了靈活性,因此在速度上還是有所損失,但如果我們要追求高效率的話,比如在實(shí)時(shí)系統(tǒng)中就要盡可能的少用這種機(jī)制。2.信號(hào)與槽機(jī)制與普通函數(shù)的調(diào)用一樣,如果使用不當(dāng)?shù)脑?,在程序?zhí)行時(shí)也有可能產(chǎn)生死循環(huán)。因此,在定義槽函數(shù)時(shí)一定要注意避免間接形成無(wú)限循環(huán),即在槽中再次發(fā)射所接收到的同樣信號(hào)。3.如果一個(gè)信號(hào)與多個(gè)槽相聯(lián)系的話,那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),與之相關(guān)的槽被激活的順序?qū)⑹请S機(jī)的。3.2信號(hào)與槽的定義五注意問(wèn)題4.宏定義不能用在signal和slot的參數(shù)中。5.構(gòu)造函數(shù)不能用在signals或者slots聲明區(qū)域內(nèi)。6.函數(shù)指針不能作為信號(hào)或槽的參數(shù)。7.信號(hào)與槽不能有缺省參數(shù)。8.信號(hào)與槽也不能攜帶模板類參數(shù)。9.嵌套的類不能位于信號(hào)或槽區(qū)域內(nèi),也不能有信號(hào)或者槽。10.友元聲明不能位于信號(hào)或者槽聲明區(qū)內(nèi)。注意:槽函數(shù)聲明后,必須要定義。主要內(nèi)容132信號(hào)與槽的概念信號(hào)與槽的應(yīng)用信號(hào)與槽定義3.3信號(hào)和槽的應(yīng)用案例分析利用Qt設(shè)計(jì)一個(gè)經(jīng)典計(jì)算器。

信號(hào)與槽概念信號(hào)與槽機(jī)制,如:信號(hào)與槽聲明、關(guān)聯(lián)、定義及使用等。案例說(shuō)明。

小結(jié)

什么是信號(hào),什么是槽,信號(hào)與槽如何關(guān)聯(lián)?簡(jiǎn)述信號(hào)和槽的聲明位置,槽函數(shù)的定義位置及槽函數(shù)的類型有哪些?作業(yè)QtC++第四章對(duì)話框設(shè)計(jì)主要內(nèi)容12QDialog類簡(jiǎn)介QDialog派生類—建立自己對(duì)話框34內(nèi)建對(duì)話框類實(shí)例案例分析4.1QDialog類對(duì)話框是各種軟件設(shè)計(jì)中用的最多的,是人機(jī)交互的平臺(tái),對(duì)話框有各種各樣的種類及用途。Linux提供了一系列標(biāo)準(zhǔn)對(duì)話框,如文件選擇、字體選擇、顏色選擇等等。Qt對(duì)這些標(biāo)準(zhǔn)對(duì)話框都定義了相關(guān)的類。如:1)文件對(duì)話框(QFileDialog)2)顏色對(duì)話框(QColorDialog)3)字體對(duì)話框(QFontDialog)4)輸入對(duì)話框(QInputDialog)5)消息對(duì)話框(QMessageBox)6)打印對(duì)話框(QPrintDialog)7)進(jìn)度對(duì)話框(QProgressDialog)/進(jìn)度條(QProgressBar)8)錯(cuò)誤消息框(QErrorMessage)4.1QDialog類1、Qt類:QObject類所Qt對(duì)象基類,QObject是Qt模塊的核心。它的最主要特征是關(guān)于對(duì)象間無(wú)縫通信的機(jī)制:信號(hào)與槽。

QObject以對(duì)象樹的形式組織起來(lái)。QApplication類代表應(yīng)用程序,每個(gè)程序能有一個(gè)它的實(shí)例。它負(fù)責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來(lái)自窗口系統(tǒng)和其他資源的事件,并且處理應(yīng)用程序的開始、結(jié)束以及會(huì)話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。對(duì)于一個(gè)應(yīng)用程序來(lái)說(shuō),建立此類的對(duì)象是必不可少的QApplication和QWidget都是QObject類的子類。4.1QDialog類1、Qt類:

窗口是Qt的基本元素,組件是窗口上更小的元素Qt以組件對(duì)象的方式構(gòu)建圖形用戶界面,圖形用戶界面是由不同的窗口和窗口組件構(gòu)成

組件類型:容器類(父組件):用于包含其它的界面組件功能類(子組件):用于實(shí)現(xiàn)特定的交互功能Qt中沒(méi)有父組件的頂級(jí)組件叫窗口

QMainWindow,Qwidget和QDialog是常用的三種窗口的基類,所有的窗口部件都繼承自QWidget。4.1QDialog類1、Qt類:QWidget類是所有用戶界面對(duì)象的基類。窗口部件是用戶界面的一個(gè)基本單元:它從窗口系統(tǒng)接收鼠標(biāo)、鍵盤和其它事件,并且在屏幕上繪制自己。每一個(gè)窗口部件都是矩形的,并且它們按Z軸順序排列。一個(gè)窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。QMainWindow類提供一個(gè)有菜單條、錨接窗口(例如工具條)和一個(gè)狀態(tài)條的主應(yīng)用程序窗口。主窗口通常用在提供一個(gè)大的中央窗口部件(例如文本編輯或者繪制畫布)以及周圍菜單、工具條和一個(gè)狀態(tài)條。QMainWindow常常被繼承,因?yàn)檫@使得封裝中央部件、菜單和工具條以及窗口狀態(tài)條變得更容易,當(dāng)用戶點(diǎn)擊菜單項(xiàng)或者工具條按鈕時(shí),槽會(huì)被調(diào)用。4.1QDialog類1、Qt類:QDialog類是對(duì)話框窗口的基類。對(duì)話框窗口是主要用于短期任務(wù)以及和用戶進(jìn)行簡(jiǎn)要通訊的頂級(jí)窗口。一個(gè)不會(huì)被嵌入到父窗口部件的窗口部件叫做頂級(jí)窗口部件。通常情況下,頂級(jí)窗口部件是有框架和標(biāo)題欄的窗口。在Qt中,QMainWindow和不同的QDialog的子類是最普通的頂級(jí)窗口。如果是頂級(jí)對(duì)話框,那就基于QDialog創(chuàng)建,如果是主窗體,那就基于QMainWindow,如果不確定,或者有可能作為頂級(jí)窗體,或有可能嵌入到其他窗體中,則基于QWidget創(chuàng)建。當(dāng)然了,實(shí)際中,你還可以基于任何其他部件類來(lái)派生。4.1QDialog類1、Qt類:QWidget是所有widget的基類,自定義窗口QDialog提供一個(gè)對(duì)話框,從外觀上來(lái)看,對(duì)話框一般沒(méi)有最大化、最小化按鈕。QMainWindow提供一個(gè)主窗口,包括菜單欄等4.1QDialog類2、QDialog工作模式:Qt創(chuàng)建的對(duì)話框類型,打開時(shí)有模態(tài)和非模態(tài)兩種形式。模態(tài)對(duì)話框是最普遍的對(duì)話框類型。當(dāng)模態(tài)對(duì)話框顯示時(shí),其他窗口將全部進(jìn)入非激活狀態(tài),不能接受鍵盤和鼠標(biāo)事件。即就是:模態(tài)對(duì)話框在沒(méi)有消失前,用戶不能與同一個(gè)應(yīng)用程序的其它窗口交互,直到該對(duì)話框關(guān)閉。QDialog::exec()以模態(tài)方式顯示對(duì)話框。非模態(tài)對(duì)話框,是和同一個(gè)程序中其它窗口操作無(wú)關(guān)的。即就是:非模態(tài)對(duì)話框被打開時(shí),用戶可以選擇與該對(duì)話框進(jìn)行交互,也可以選擇與應(yīng)用程序的其它窗口進(jìn)行交互。QDialog::show()以非模態(tài)方式顯示對(duì)話框。4.1QDialog類3、QDialog類繼承關(guān)系:QDialog繼承自QWidget框架,在自定義對(duì)話框時(shí),繼承QDialog,進(jìn)而可以使用QWidget的方法。目前使用過(guò)的QDialog派生的子類為QMessageBox、QErrorMessage,為彈框提示使用的類,對(duì)于調(diào)試代碼邏輯反饋?zhàn)饔幂^大。Qt中QDialog的繼承關(guān)系如下圖所示。4.1QDialog類4.1QDialog類主要內(nèi)容12QDialog類簡(jiǎn)介QDialog派生類—建立自己對(duì)話框34內(nèi)建對(duì)話框類實(shí)例案例分析1、QDialog類派生類:通過(guò)案例說(shuō)明,QDialog派生類的使用方法,以及Qdialog對(duì)話框的創(chuàng)建和設(shè)計(jì)。見(jiàn)P99QDialog

溫馨提示

  • 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)論