Qt 6.2C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā) 思政教學(xué)課件 第1、2章 初識(shí)Qt框架、Qt開(kāi)發(fā)基礎(chǔ)_第1頁(yè)
Qt 6.2C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā) 思政教學(xué)課件 第1、2章 初識(shí)Qt框架、Qt開(kāi)發(fā)基礎(chǔ)_第2頁(yè)
Qt 6.2C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā) 思政教學(xué)課件 第1、2章 初識(shí)Qt框架、Qt開(kāi)發(fā)基礎(chǔ)_第3頁(yè)
Qt 6.2C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā) 思政教學(xué)課件 第1、2章 初識(shí)Qt框架、Qt開(kāi)發(fā)基礎(chǔ)_第4頁(yè)
Qt 6.2C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā) 思政教學(xué)課件 第1、2章 初識(shí)Qt框架、Qt開(kāi)發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩136頁(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)介

Qt6.2/C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā)21世紀(jì)高等學(xué)校計(jì)算機(jī)類課程創(chuàng)新規(guī)劃教材–微課視頻版教材目錄第1章初識(shí)Qt框架第2章Qt開(kāi)發(fā)基礎(chǔ)第3章界面設(shè)計(jì)組件第4章主框架窗口第5章對(duì)話框設(shè)計(jì)第6章事件系統(tǒng)第7章文件與數(shù)據(jù)庫(kù)第8章模型/視圖結(jié)構(gòu)第9章圖形繪制第10章多媒體編程第11章網(wǎng)絡(luò)編程第12章進(jìn)程與線程教材目錄第1章初識(shí)Qt框架1.1Qt簡(jiǎn)介1.2開(kāi)發(fā)環(huán)境搭建1.3程序設(shè)計(jì)方式1.4項(xiàng)目結(jié)構(gòu)分析1.1Qt簡(jiǎn)介Qt是一個(gè)基于C++面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言、功能全面、跨平臺(tái)的圖形用戶界面(GUI)應(yīng)用程序框架。它提供了一種高效的、真正基于組件編程模式的應(yīng)用程序設(shè)計(jì)解決方案。Qt實(shí)際上就是一套C++應(yīng)用程序開(kāi)發(fā)類庫(kù),與MicrosoftMFC類似。歷史及應(yīng)用1、發(fā)展歷程Qt由挪威Trolltech(奇趣科技)公司于1991年開(kāi)發(fā),在2008年,Trolltech公司被諾基亞公司收購(gòu),Qt也因此成為諾基亞旗下的編程語(yǔ)言工具。2012年,芬蘭的Digia公司完成對(duì)諾基亞公司Qt技術(shù)平臺(tái)和知識(shí)產(chǎn)權(quán)的收購(gòu),Qt由此歸屬于Digia公司。2014年,Digia成立獨(dú)立的Qt公司,專門(mén)負(fù)責(zé)Qt的開(kāi)發(fā)、維護(hù)和商業(yè)推廣。歷史及應(yīng)用2、應(yīng)用實(shí)例自1995年以來(lái),Qt逐步進(jìn)入商業(yè)領(lǐng)域,已成為數(shù)以萬(wàn)計(jì)商業(yè)和開(kāi)源應(yīng)用程序的基礎(chǔ)。QtC++框架一直都是商業(yè)應(yīng)用程序的核心,無(wú)論是跨國(guó)公司和大型組織,如Adobe、Boeing、Google、IBM、Motorola、NASA、Skype等,還是無(wú)數(shù)小型公司和組織都在使用Qt進(jìn)行各種類型應(yīng)用程序的開(kāi)發(fā)。歷史及應(yīng)用在桌面應(yīng)用領(lǐng)域,下面這些著名的軟件都用到了Qt。(1)Maya,由Autodesk公司出品的優(yōu)秀三維動(dòng)畫(huà)制作軟件。2011版開(kāi)始使用Qt進(jìn)行開(kāi)發(fā)。(2)WPSOffice,是由金山軟件股份有限公司自主研發(fā)的一款辦公軟件套裝,可以實(shí)現(xiàn)辦公軟件最常用的文字、表格、演示,PDF閱讀等多種功能。(3)VirtualBox,是運(yùn)行在x86上的一款虛擬機(jī)軟件,目前屬于Oracle公司。運(yùn)行該軟件的操作系統(tǒng)被稱為主操作系統(tǒng)。該軟件運(yùn)行時(shí),向用戶呈現(xiàn)一個(gè)虛擬的計(jì)算機(jī),用戶可以在這個(gè)虛擬計(jì)算機(jī)上安裝一個(gè)從屬操作系統(tǒng)。版本與特點(diǎn)Qt的發(fā)行版本分為商業(yè)版和開(kāi)源版。商業(yè)版提供給用戶進(jìn)行商業(yè)軟件開(kāi)發(fā),它是一個(gè)傳統(tǒng)的商業(yè)軟件,并提供協(xié)議有效期內(nèi)的免費(fèi)升級(jí)和技術(shù)支持服務(wù);Qt開(kāi)源版是為了開(kāi)發(fā)自由而設(shè)計(jì)的開(kāi)放源碼軟件,它提供了和商業(yè)版本基本相同的功能,在GNU通用公共許可證下免費(fèi)供用戶使用。經(jīng)過(guò)二十多年的發(fā)展與進(jìn)步,Qt的版本已經(jīng)從Qt5更新到了Qt6。本教材使用Qt6.2.1LTS,它是Qt6的第1個(gè)長(zhǎng)期支持(LTS,longtermsupported)版本。版本與特點(diǎn)Qt的主要特點(diǎn):(1)跨平臺(tái)Qt支持PC和服務(wù)器的平臺(tái),包括Windows、Linux和macOS等,還支持移動(dòng)和嵌入式操作系統(tǒng),如iOS、EmbeddedLinux、Android和WinRT等??缙脚_(tái)意味著只需要編寫(xiě)一次程序,在不同平臺(tái)上無(wú)需改動(dòng)或只需少許改動(dòng)后再編譯,就可以形成在不同平臺(tái)上運(yùn)行的版本。這種跨平臺(tái)特性為開(kāi)發(fā)者提供了極大的便利。版本與特點(diǎn)(2)面向?qū)ο驫t的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性好,對(duì)于用戶開(kāi)發(fā)來(lái)說(shuō)是非常方便的。另外,Qt提供了一種稱為signal/slot(信號(hào)/槽)的通信機(jī)制,這使得各個(gè)元件之間的協(xié)同工作變得更為簡(jiǎn)單安全。(2)豐富的API

Qt包括多達(dá)300多個(gè)C++類,除了用于用戶界面開(kāi)發(fā),還可用于文件操作、數(shù)據(jù)庫(kù)處理、2D/3D圖形渲染、多媒體操作和網(wǎng)絡(luò)通信等。1.2開(kāi)發(fā)環(huán)境搭建Qt應(yīng)用開(kāi)發(fā)一般都使用集成開(kāi)發(fā)環(huán)境。目前,支持Qt應(yīng)用開(kāi)發(fā)的集成工具有很多,其中能夠跨平臺(tái)使用的主要有QtCreator、QDevelop、Eclipse、MonkeyStudio和Code::Blocks等。除此之外,還有在X11平臺(tái)上使用的Kdevelop,在Windows平臺(tái)上使用的MicrosoftVisualStudio,以及在Mac平臺(tái)上使用的Xcode等。下載與安裝1、下載與Qt5版本不同的是,Qt6只能使用在線安裝器進(jìn)行安裝。下載Qt的軟件安裝器有多種途徑,可以到Qt的官方網(wǎng)站上進(jìn)行下載,其網(wǎng)址為:https://www.qt.io/download也可以使用國(guó)內(nèi)的Qt鏡像網(wǎng)址或者一些其他的軟件資源下載平臺(tái)。建議使用清華大學(xué)開(kāi)源軟件鏡像網(wǎng)站下載Qt的在線安裝器。其網(wǎng)址為:/qt/official_releases/online_installers/下載與安裝2、安裝運(yùn)行Qt軟件安裝器,根據(jù)向?qū)崾据斎胂鄳?yīng)的信息。注意Qt組件選擇(SelectComponense)這個(gè)步驟,其界面如圖所示。這是Qt安裝中非常重要的一個(gè)步驟,建議優(yōu)先安裝Qt的基礎(chǔ)組件,待開(kāi)發(fā)過(guò)程中根據(jù)應(yīng)用程序業(yè)務(wù)邏輯的實(shí)際需要,再進(jìn)行有針對(duì)性的補(bǔ)充。另外,除了安裝Qt庫(kù)之外,還需要安裝QtCreator等開(kāi)發(fā)和設(shè)計(jì)工具。如圖所示集成開(kāi)發(fā)工具本教材使用QtCreator集成開(kāi)發(fā)工具進(jìn)行Qt應(yīng)用程序的開(kāi)發(fā),版本為5.0.2。QtCreator是Qt官方推出的一款跨平臺(tái)開(kāi)源集成開(kāi)發(fā)工具,具有界面簡(jiǎn)潔、操作方便、與Qt結(jié)合完美等特點(diǎn)。其界面如下圖所示。菜單欄模式選擇器構(gòu)建套件選擇器定位器輸出窗格QtCreator界面編輯模式項(xiàng)目視圖類視圖代碼編輯窗口QtCreator集成開(kāi)發(fā)環(huán)境的設(shè)置:通過(guò)“Tools|Options”菜單命令打開(kāi)的“Options”窗口來(lái)完成。如圖所示QtCreator設(shè)置【例1.1】編寫(xiě)一個(gè)基于Qt的HelloWorld程序。程序運(yùn)行后,在窗口中顯示“HelloWorld”字符串,運(yùn)行結(jié)果如下圖所示。QtCreator應(yīng)用(1)啟動(dòng)QtCreator開(kāi)發(fā)工具,選擇File|NewFileorProject菜單命令,或者單擊Welcome模式中的Projects+New按鈕,打開(kāi)“NewProject”對(duì)話框。(2)在“NewProject”對(duì)話框中選擇Application(Qt)中的QtWidgetsApplication項(xiàng)目模板,單擊“Choose…”按鈕,打開(kāi)Qt應(yīng)用程序創(chuàng)建向?qū)А?3)設(shè)置項(xiàng)目名稱為“examp1_1”,指定項(xiàng)目存放位置為“F:\chap01”

(4)選擇默認(rèn)的qmake項(xiàng)目構(gòu)建系統(tǒng)(5)選擇QWidget基類,其他使用系統(tǒng)默認(rèn)值(6)本項(xiàng)目不使用其他語(yǔ)言(7)選擇項(xiàng)目的構(gòu)建套件,這里使用DesktopQt6.2.1MinGW64-bit(8)不向項(xiàng)目中添加其他子項(xiàng)目,也不設(shè)置版本控制。單擊“Finish”按鈕,完成項(xiàng)目(9)展開(kāi)“Projects”窗口中項(xiàng)目名稱節(jié)點(diǎn)下的“Forms”分組,雙擊該分組中的widget.ui窗體界面文件,打開(kāi)QtDesigner界面設(shè)計(jì)器,對(duì)應(yīng)用程序主窗口界面進(jìn)行可視化設(shè)計(jì)。(10)點(diǎn)擊窗體,設(shè)置其大小(WidthxHeight)為320x240;窗體標(biāo)題(windowTitle)為“例1.1”。(11)在窗體中設(shè)置Label控件和PushButton控件,分別用來(lái)顯示字符串和執(zhí)行窗口關(guān)閉命令。在窗體中設(shè)置控件,直接用鼠標(biāo)將控件從控件箱拖動(dòng)到窗口中的適當(dāng)位置即可。(12)分別點(diǎn)擊窗體中的Label控件和PushButton控件,將其text屬性分別設(shè)置為“HelloWorld”和“退出”。(13)保存文件,單擊QtCreator左邊欄中的Run按鈕,構(gòu)建并運(yùn)行應(yīng)用程序(14)再次打開(kāi)窗體設(shè)計(jì)器,按快捷鍵F4將窗體的編輯狀態(tài)切換成“EditSignalsandSlots”,選擇“退出”按鈕并拖動(dòng)鼠標(biāo)至窗體中,彈出“ConfigureConnection”對(duì)話框(15)保存文件,再次單擊QtCreator左邊欄中的“Run”按鈕,運(yùn)行應(yīng)用程序。此時(shí),若單擊主窗口中的“退出”按鈕,應(yīng)用程序主窗口會(huì)隨即關(guān)閉。1.3程序設(shè)計(jì)方式搭建好Qt開(kāi)發(fā)環(huán)境后,就可以開(kāi)始進(jìn)行Qt應(yīng)用程序的開(kāi)發(fā)了。Qt應(yīng)用程序的開(kāi)發(fā)可以采用3種程序設(shè)計(jì)方式,即可視化設(shè)計(jì)方式、代碼化設(shè)計(jì)方式和混合式設(shè)計(jì)方式??梢暬O(shè)計(jì)1、可視化設(shè)計(jì)所謂可視化設(shè)計(jì)方式,就是應(yīng)用程序框架通過(guò)向?qū)ё詣?dòng)生成,然后使用QtDesigner設(shè)計(jì)器進(jìn)行窗體界面布局設(shè)計(jì)、Action設(shè)計(jì),以及信號(hào)和槽的添加等操作。例如,上述例1.1應(yīng)用程序的開(kāi)發(fā)所采用的就是可視化設(shè)計(jì)方法?!纠?.2】重新編寫(xiě)例1.1中的HelloWorld應(yīng)用程序,將應(yīng)用程序主窗口基類設(shè)置為QDialog,并使主窗口中的字符串和按鈕控件均水平居中對(duì)齊。運(yùn)行結(jié)果如圖所示。(1)打開(kāi)QtCreator開(kāi)發(fā)工具,生成一個(gè)名為examp1_2的Qt應(yīng)用程序,并將主窗口標(biāo)題設(shè)置為“例1.2”。操作方法如例1.1所示。(2)在窗體中設(shè)置Label控件和PushButton控件,并添加3個(gè)VerticalSpacer控件,對(duì)象名稱使用默認(rèn)值(3)選擇主窗口中的全部控件,單擊工具欄中的“垂直布局管理器”圖標(biāo),在主窗口中添加一個(gè)VerticalLayout控件,對(duì)象名稱使用默認(rèn)值,并調(diào)整其大小(4)分別選擇Label控件和PushButton控件,在屬性窗口中設(shè)置其text屬性值分別為“HelloWorld”和“退出”,并通過(guò)右鍵菜單設(shè)置其水平居中對(duì)齊(5)實(shí)現(xiàn)“退出”按鈕的單擊功能。單擊“SignalsandSlotsEditer”窗口中的“+”按鈕,添加一個(gè)新的信號(hào)與槽。設(shè)置Sender、Signal、Receiver和Slot分別為pushButton、clicked()、Dialog和close()

(6)保存文件,單擊QtCreator左邊欄中的“Run”按鈕,運(yùn)行應(yīng)用程序。單擊主窗口中的“退出”按鈕,主窗口隨即關(guān)閉。2、代碼化設(shè)計(jì)所謂代碼化設(shè)計(jì)方法,就是應(yīng)用程序的所有代碼均手工添加完成,而不使用QtDesigner等設(shè)計(jì)工具。代碼化設(shè)計(jì)【例1.3】使用手工編碼的方式,完成例1.2程序功能。(1)打開(kāi)QtCreator開(kāi)發(fā)工具,選擇“Projects”下的“OtherProject”模板中的“EmptyqmakeProject”模板,生成一個(gè)名為examp1_3的空Qt應(yīng)用程序。(2)雙擊打開(kāi)應(yīng)用程序的項(xiàng)目文件“examp1_3.pro”,在文件中添加如下文本行,將Qt的Widgets模塊加載到項(xiàng)目中。QT+=widgets(3)右擊新生成的項(xiàng)目文件夾examp1_3,在彈出的快捷菜單中選擇“AddNew…”菜單命令,打開(kāi)“新文件”對(duì)話框。向項(xiàng)目中添加一個(gè)名為“main.cpp”的C++源文件。(4)雙擊打開(kāi)main.cpp文件,在文件中添加代碼,實(shí)現(xiàn)程序功能。創(chuàng)建主窗口對(duì)象,并設(shè)置其屬性創(chuàng)建主窗口中的控件對(duì)象,并設(shè)置其屬性創(chuàng)建主窗口的垂直布局,并設(shè)置控件信號(hào)與槽(5)單擊QtCreator中的“運(yùn)行”按鈕,即可得到程序的運(yùn)行結(jié)果。如圖1.40所示。單擊對(duì)話框中的“退出”按鈕,即可關(guān)閉程序的主對(duì)話框。3、混合式設(shè)計(jì)使用可視化設(shè)計(jì)方法開(kāi)發(fā)Qt應(yīng)用程序,不需要人工編寫(xiě)代碼去處理大量繁瑣的界面組件的創(chuàng)建和布局管理工作,可以直觀地進(jìn)行界面設(shè)計(jì),從而大大提高了應(yīng)用程序開(kāi)發(fā)的工作效率。但該設(shè)計(jì)方法也存在一些缺陷,如某些組件無(wú)法可視化地添加到界面上,此時(shí)就必須手工編寫(xiě)代碼來(lái)實(shí)現(xiàn)相應(yīng)的部件功能。采用純代碼方式進(jìn)行Qt應(yīng)用程序開(kāi)發(fā),能夠設(shè)計(jì)出非常精美的用戶界面,并且可以實(shí)現(xiàn)非常復(fù)雜的業(yè)務(wù)邏輯。但是設(shè)計(jì)效率太低,過(guò)程也非常的繁瑣。因此,在實(shí)際的開(kāi)發(fā)過(guò)程中,常常使用混合的設(shè)計(jì)方法,能夠使用可視化設(shè)計(jì)的就盡可能可視化設(shè)計(jì)解決,無(wú)法可視化實(shí)現(xiàn)的再用純代碼的方法解決?;旌鲜皆O(shè)計(jì)【例1.4】使用混合式設(shè)計(jì)方法,實(shí)現(xiàn)例1.2的程序功能。要求在“退出”按鈕上添加菜單,當(dāng)選擇菜單中的“確定”命令時(shí),關(guān)閉應(yīng)用程序主窗口。如圖所示。(1)打開(kāi)QtCreator開(kāi)發(fā)工具,生成一個(gè)名為examp1_4的Qt應(yīng)用程序。將主窗口標(biāo)題設(shè)置為“例1.4”,并按照例1.1的操作步驟,向主窗口中添加控件及布局管理器。這里采用可視化程序設(shè)計(jì)方法完成應(yīng)用程序框架的生成與主窗口界面的設(shè)計(jì)。(2)編寫(xiě)代碼,實(shí)現(xiàn)新增功能。由于在QtDesigner中不能直接將菜單放置在“退出”按鈕控件上,所以必須采用代碼化方式來(lái)實(shí)現(xiàn)相關(guān)的界面功能。(3)保存文件,構(gòu)建并運(yùn)行應(yīng)用程序。單擊“退出”按鈕,彈出按鈕菜單,選擇“確定”菜單命令,應(yīng)用程序主窗口隨即關(guān)閉。1.4項(xiàng)目結(jié)構(gòu)分析Qt應(yīng)用程序一般都包含有多個(gè)文件,這些相關(guān)聯(lián)的文件被組織在一起,以“項(xiàng)目”的形式進(jìn)行統(tǒng)一管理。下面以例1.1創(chuàng)建的程序?yàn)槔?jiǎn)要分析一下Qt應(yīng)用程序項(xiàng)目的文件類型、作用,以及程序的運(yùn)行機(jī)制。1、項(xiàng)目文件組成在QtCreator中打開(kāi)例1.1中的Qt項(xiàng)目examp1_1,切換到“Edit”模式,展開(kāi)項(xiàng)目視圖中的各個(gè)文件分組。如圖所示。項(xiàng)目文件組成從圖中可以看到,項(xiàng)目examp1_1包含4種類型的文件,分別是項(xiàng)目文件examp1_1.pro、主函數(shù)文件main.cpp、類文件widget.h/widget.cpp和界面文件widget.ui。項(xiàng)目文件用于項(xiàng)目管理,包括項(xiàng)目設(shè)置、使用的Qt模塊、包含的文件等信息;主函數(shù)文件是實(shí)現(xiàn)main()函數(shù)的文件,main()函數(shù)是C++應(yīng)用程序入口函數(shù),其主要功能是創(chuàng)建應(yīng)用程序、創(chuàng)建窗口、顯示窗口、運(yùn)行程序、啟動(dòng)應(yīng)用程序的消息循環(huán)和事件處理;類文件包括項(xiàng)目中類的聲明及實(shí)現(xiàn)文件;界面文件是使用QtDesigner進(jìn)行界面設(shè)計(jì)生成的文件,它實(shí)際上就是一個(gè)XML文件,用于管理界面中的窗體、部件、信號(hào)/槽等信息。需要注意的是,Qt項(xiàng)目中的界面文件在項(xiàng)目構(gòu)建后將被轉(zhuǎn)換成類文件。展開(kāi)項(xiàng)目examp1_1構(gòu)建生成的文件夾build-examp1_1-Desktop_Qt_6_2_1_MinGW_64_bit-Debug,可以看到有一個(gè)名為ui_widget.h的文件,該文件就是由examp1_1.ui界面文件生成的類文件。除了上述介紹的文件之外,Qt項(xiàng)目中還可能有一些其他類型的文件,例如管理項(xiàng)目資源的資源文件、存儲(chǔ)項(xiàng)目數(shù)據(jù)的文本文件或二進(jìn)制文件等。需要說(shuō)明一下的是,上面的項(xiàng)目結(jié)構(gòu)分析是以examp1_1應(yīng)用為例講解的,而examp1_1是采用qmake項(xiàng)目構(gòu)建系統(tǒng)構(gòu)建的。其實(shí),QtCreator集成開(kāi)發(fā)工具提供了3種項(xiàng)目構(gòu)建系統(tǒng),它們是qmake、CMake和Qbs,如圖1.18所示(展開(kāi)Buildsystem組合框)。采用不同的項(xiàng)目構(gòu)建系統(tǒng)構(gòu)建的Qt項(xiàng)目,其項(xiàng)目結(jié)構(gòu)是不一樣的。程序運(yùn)行機(jī)制2、程序運(yùn)行機(jī)制Qt程序是屬于C++的,它的入口主函數(shù)仍然是main()下面是examp1_1項(xiàng)目中main.cpp文件內(nèi)容:第一步:創(chuàng)建一個(gè)Qt應(yīng)用程序?qū)嵗齉Application是Qt的標(biāo)準(zhǔn)應(yīng)用程序類,它的實(shí)例a就是一個(gè)Qt應(yīng)用程序?qū)ο蟆5诙剑簞?chuàng)建應(yīng)用程序主窗口并顯示W(wǎng)idget是繼承于QWidget的派生類,QWidget是Qt的窗體類,所以Widget類的實(shí)例w就是一個(gè)Qt窗口對(duì)象。通過(guò)對(duì)象w調(diào)用其成員函數(shù)show()實(shí)現(xiàn)應(yīng)用程序主窗口的顯示。第三步:?jiǎn)?dòng)應(yīng)用程序并開(kāi)始應(yīng)用程序的消息循環(huán)和事件處理通過(guò)對(duì)象a調(diào)用其成員函數(shù)exec()啟動(dòng)應(yīng)用程序的執(zhí)行,QApplication類的exec()函數(shù)會(huì)讓?xiě)?yīng)用程序進(jìn)行消息循環(huán),也就是將主窗口持續(xù)顯示,等待用戶的下一步操作。課后作業(yè)思政本章結(jié)束Qt6.2/C++程序設(shè)計(jì)與桌面應(yīng)用開(kāi)發(fā)21世紀(jì)高等學(xué)校計(jì)算機(jī)類課程創(chuàng)新規(guī)劃教材–微課視頻版教材目錄第1章初識(shí)Qt框架第2章Qt開(kāi)發(fā)基礎(chǔ)第3章界面設(shè)計(jì)組件第4章主框架窗口第5章對(duì)話框設(shè)計(jì)第6章事件系統(tǒng)第7章文件與數(shù)據(jù)庫(kù)第8章模型/視圖結(jié)構(gòu)第9章圖形繪制第10章多媒體編程第11章網(wǎng)絡(luò)編程第12章進(jìn)程與線程教材目錄第2章Qt開(kāi)發(fā)基礎(chǔ)2.1Qt應(yīng)用概述2.2元對(duì)象系統(tǒng)2.3信號(hào)與槽2.4常用Qt工具類2.1Qt應(yīng)用概述Qt是一個(gè)采用標(biāo)準(zhǔn)C++程序設(shè)計(jì)語(yǔ)言編寫(xiě)的、跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)類庫(kù),它對(duì)標(biāo)準(zhǔn)C++進(jìn)行了擴(kuò)展,引入了元對(duì)象系統(tǒng)、信號(hào)與槽、動(dòng)態(tài)屬性等一些新的特性。由于Qt對(duì)標(biāo)準(zhǔn)C++進(jìn)行了擴(kuò)展,因此,Qt應(yīng)用程序也擁有了一些自己的特性。Qt應(yīng)用特點(diǎn)與標(biāo)準(zhǔn)的C++應(yīng)用程序相比較,Qt應(yīng)用主要有如下特點(diǎn):(1)使用特有的宏擴(kuò)展類的功能Qt的類中常常會(huì)設(shè)置一些特有的宏,例如Q_CLASSINFO()、Q_OBJECT、Q_PROPERTY()、Q_SIGNALS和Q_SLOTS等,來(lái)實(shí)現(xiàn)Qt的一些擴(kuò)展功能(2)使用信號(hào)與槽機(jī)制實(shí)現(xiàn)對(duì)象間通信信號(hào)與槽是Qt的一個(gè)核心特點(diǎn),也是區(qū)別于其他框架的重要特性。信號(hào)與槽是Qt對(duì)象間進(jìn)行通信的機(jī)制,在第1章的例1.1應(yīng)用程序中,我們使用這種機(jī)制完成了單擊“退出”按鈕來(lái)關(guān)閉主窗口的操作,也就是完成了Qt的QPushBotton對(duì)象與QWidget對(duì)象間的通信。像這樣對(duì)象間的通信,在VisualC++MFC框架中,則是通過(guò)“消息”映射的方式來(lái)實(shí)現(xiàn)的。(3)使用元對(duì)象編譯器進(jìn)行預(yù)處理。由于Qt對(duì)標(biāo)準(zhǔn)C++進(jìn)行了擴(kuò)展,增加了像信號(hào)/槽、屬性系統(tǒng)等一些新的功能,所以在Qt應(yīng)用程序中的一些代碼不能直接使用標(biāo)準(zhǔn)C++編譯器進(jìn)行編譯,需要先將其轉(zhuǎn)換成標(biāo)準(zhǔn)C++兼容的形式。Qt的元對(duì)象編譯器(Meta-ObjectCompiler,MOC)是一個(gè)預(yù)處理器,在源程序被編譯前先將具有Qt特性的程序轉(zhuǎn)換為標(biāo)準(zhǔn)C++兼容的形式,然后再由標(biāo)準(zhǔn)C++編譯器進(jìn)行編譯與鏈接。(4)使用不同類型的文件實(shí)現(xiàn)不同的功能Qt應(yīng)用程序是由多個(gè)不同類型的文件組成的,除了我們?cè)?.4.1節(jié)中分析的項(xiàng)目文件(*.pro)、類文件(*.h和*.cpp)以及界面文件(*.ui)之外,還包括實(shí)現(xiàn)元對(duì)象系統(tǒng)(Meta–ObjectSystem)特性的MOC預(yù)處理文件(moc_*.h、moc_*.cpp和moc_*.o)以及對(duì)資源進(jìn)行管理的資源文件(*.qrc)等。這些文件分別實(shí)現(xiàn)不同的功能,最后由標(biāo)準(zhǔn)C++編譯器將它們編譯、鏈接成一個(gè)整體。Qt應(yīng)用功能Qt應(yīng)用的功能取決于用戶需求以及開(kāi)發(fā)中所使用的Qt類。Qt類庫(kù)中的類是以模塊方式進(jìn)行組織和管理的,版本不同其模塊數(shù)量、各個(gè)模塊中包含的類都會(huì)不一樣。Qt6.2.1的模塊被分成了QtEssentials(基本模塊)和QtAdd-Ons(附加模塊)兩大類。1、基本功能Qt應(yīng)用的基本功能由Qt基本模塊中的類來(lái)實(shí)現(xiàn),這些類在所有的開(kāi)發(fā)平臺(tái)和目標(biāo)平臺(tái)上均可使用。Qt6.2.1的基本模塊及其功能描述,如下表所示。2、特定功能Qt應(yīng)用的特定功能由Qt附加模塊中的類來(lái)實(shí)現(xiàn)。Qt中的附加模塊實(shí)現(xiàn)一些特定的目的,它們可能只針對(duì)某些開(kāi)發(fā)平臺(tái),或只能用于某些操作系統(tǒng),或只是為了向后兼容。Qt6.2.1的附加模塊及其功能描述,如下表所示。2.2元對(duì)象系統(tǒng)Qt的元對(duì)象系統(tǒng)(Meta-ObjectSystem)提供了對(duì)象之間通信的信號(hào)與槽機(jī)制、運(yùn)行時(shí)類型信息和動(dòng)態(tài)屬性系統(tǒng)。1、對(duì)象模型標(biāo)準(zhǔn)C++對(duì)象模型可以在運(yùn)行時(shí)非常有效地支持對(duì)象范式(objectparadigm),但是它的靜態(tài)特性在一些問(wèn)題領(lǐng)域中不夠靈活。Qt在標(biāo)準(zhǔn)C++對(duì)象模型的基礎(chǔ)上添加了一些特性,形成了自己的對(duì)象模型。這些特性主要有:(1)一個(gè)強(qiáng)大的無(wú)縫對(duì)象通信機(jī)制,即信號(hào)與槽(signalsandslots);(2)可查詢和可設(shè)計(jì)的對(duì)象屬性系統(tǒng)(objectproperties);(3)強(qiáng)大的事件和事件過(guò)濾器(eventsandeventfilters);對(duì)象模型(4)通過(guò)上下文進(jìn)行國(guó)際化的字符串翻譯機(jī)制(stringtranslationforinternationalization)(5)完善的定時(shí)器(timers)驅(qū)動(dòng),使得可以在一個(gè)事件驅(qū)動(dòng)的GUI中處理多個(gè)任務(wù);(6)分層結(jié)構(gòu)的、可查詢的對(duì)象樹(shù)(objecttrees),它使用一種很自然的方式來(lái)組織對(duì)象擁有權(quán)(objectownership);(7)守衛(wèi)指針即QPointer,它在引用對(duì)象被銷毀時(shí)自動(dòng)將其設(shè)置為0;(8)動(dòng)態(tài)的對(duì)象轉(zhuǎn)換機(jī)制(dynamiccast);(9)支持自定義類型的創(chuàng)建Qt對(duì)象模型基礎(chǔ)類及功能描述,如表2.3所示。2、元對(duì)象系統(tǒng)Qt的元對(duì)象系統(tǒng)以其對(duì)象模型為基礎(chǔ),由以下三個(gè)基礎(chǔ)組成。(1)使用元對(duì)象系統(tǒng)的類必須繼承于QObject類;(2)必須在類的private聲明區(qū)聲明Q_OBJECT宏;(3)使用MOC(Meta-ObjectCompiler,元對(duì)象編譯器)為每個(gè)QObject的子類實(shí)現(xiàn)元對(duì)象特性提供必要的代碼。元對(duì)象系統(tǒng)元對(duì)象系統(tǒng)主要是為了實(shí)現(xiàn)信號(hào)與槽機(jī)制而引入的,不過(guò)除了信號(hào)/槽機(jī)制以外,元對(duì)象系統(tǒng)還提供了其他的一些特性。例如:QObject::metaObject()函數(shù)返回類關(guān)聯(lián)的元對(duì)象;)QMetaObject::className()在運(yùn)行時(shí)返回類的名稱字符串,而不需要通過(guò)C++編譯器支持本機(jī)運(yùn)行時(shí)類型信息(RTTI);QObject::inherits()函數(shù)判斷一個(gè)對(duì)象是否為某個(gè)類或QObject子類的實(shí)例;等Qt提供了強(qiáng)大的基于元對(duì)象系統(tǒng)的屬性系統(tǒng)(PropertySystem),可以在能夠運(yùn)行Qt應(yīng)用程序的平臺(tái)上支持任意的標(biāo)準(zhǔn)C++編譯器。通過(guò)Qt的屬性系統(tǒng),不僅可以靜態(tài)或動(dòng)態(tài)地定義屬性、設(shè)置屬性值、查詢屬性,還可以為類定義一些其他的附加信息。屬性系統(tǒng)1、屬性的定義在一個(gè)Qt類中聲明屬性,要求該類必須是QObject類的派生類,并且需要通過(guò)Q_PROPERTY()宏來(lái)定義。其語(yǔ)法格式如下:下面是QWidget類中定義屬性示例:【例2.1】編寫(xiě)一個(gè)非GUI的Qt應(yīng)用程序,演示使用Q_PROPERTY宏定義屬性的方法。要求為應(yīng)用程序添加一個(gè)名為Student的QObject派生類,并在該類中定義屬性name及操作函數(shù)。(1)打開(kāi)QtCreator集成開(kāi)發(fā)環(huán)境,創(chuàng)建一個(gè)非GUI的Qt應(yīng)用程序,項(xiàng)目名稱為examp2_1。(2)選擇主菜單中的File|NewFileorProject…菜單命令,打開(kāi)“NewFileorProject”對(duì)話框(3)選擇“FilesandClasses”列表框中的“C/C++”選項(xiàng),向項(xiàng)目中添加一個(gè)名為Student的C++類,其基類為QObject(4)打開(kāi)Student類的頭文件及實(shí)現(xiàn)文件,在其中添加陰影部分的代碼。(5)打開(kāi)main.cpp文件,在主函數(shù)main()中添加如下陰影部分的代碼。(6)構(gòu)建并運(yùn)行程序。輸出結(jié)果如圖所示。2、屬性的使用類的屬性定義完成后,就可以在程序中使用該屬性了。屬性的使用包括屬性的設(shè)置與讀取等操作。在例2.1應(yīng)用程序的主函數(shù)中,使用Student對(duì)象的setName()函數(shù)對(duì)name屬性進(jìn)行了設(shè)置,同時(shí)使用property()函數(shù)讀取到了該對(duì)象的name屬性值。property()函數(shù)是QObject類的成員函數(shù),原型為:QVariantQObject::property(constchar*name)const3、動(dòng)態(tài)屬性當(dāng)使用QObject::setProperty()函數(shù)為對(duì)象設(shè)置屬性時(shí),若該屬性不存在,函數(shù)會(huì)為類定義一個(gè)新的屬性,這個(gè)新屬性稱之為動(dòng)態(tài)屬性。動(dòng)態(tài)屬性是在運(yùn)行時(shí)定義的,它只屬于正在運(yùn)行的類的實(shí)例。4、附加信息在Qt的屬性系統(tǒng)中,還可以使用Q_CLASSINFO()宏來(lái)為類定義一些附加信息。該宏的語(yǔ)法格式如下:Q_CLASSINFO(Name,Value)其中,Name表示信息名稱,Value表示信息內(nèi)容。例如:Q_CLASSINFO(“author”,”mashian”)Q_CLASSINFO(“version”,”1.0.1”)【例2.2】編寫(xiě)一個(gè)Qt應(yīng)用程序,在程序主窗口中顯示自定義類的對(duì)象屬性信息,以及自定義類的類信息。運(yùn)行結(jié)果如圖所示。(1)打開(kāi)QtCreator集成開(kāi)發(fā)環(huán)境,創(chuàng)建一個(gè)基于QWidget的Qt應(yīng)用程序,項(xiàng)目名稱為examp2_2。(2)使用例2.1中相同的方法,為項(xiàng)目添加一個(gè)名為Student的新類。如圖2.5所示。為了覆蓋更多的知識(shí)點(diǎn),這里沒(méi)有使用例2.1中的Student類。(3)雙擊項(xiàng)目中的widget.ui界面文件,打開(kāi)界面設(shè)計(jì)器。在項(xiàng)目主窗口中添加一個(gè)名為plainTextEdit的QPlainTextEdit類部件,用于顯示Student類的相關(guān)信息。如圖所示。(4)打開(kāi)項(xiàng)目文件widget.h,為Widget類添加一個(gè)私有的Student對(duì)象指針student和成員函數(shù)getInfo()的聲明。代碼如下陰影部分所示。(5)打開(kāi)項(xiàng)目文件widget.cpp,在Widget類的構(gòu)造函數(shù)中添加代碼,并實(shí)現(xiàn)成員函數(shù)getInfo()的功能。代碼如下陰影部分所示。2.3信號(hào)與槽信號(hào)與槽機(jī)制是Qt的核心機(jī)制,通過(guò)這種機(jī)制能夠在應(yīng)用程序中實(shí)現(xiàn)對(duì)象之間的通信。該通信機(jī)制是Qt對(duì)標(biāo)準(zhǔn)C++的擴(kuò)展,需要由Qt的元對(duì)象系統(tǒng)支持才能實(shí)現(xiàn)。概述1、概述Qt的信號(hào)與槽通信機(jī)制類似于Windows操作系統(tǒng)中的消息處理機(jī)制,但消息處理機(jī)制是基于回調(diào)函數(shù)的;而在Qt中,使用信號(hào)和槽來(lái)代替函數(shù)指針,從而使應(yīng)用程序更加安全與簡(jiǎn)潔。在應(yīng)用程序設(shè)計(jì)過(guò)程中,當(dāng)改變了一個(gè)對(duì)象的狀態(tài)時(shí),總希望其他對(duì)象(或自己)也能及時(shí)了解到這種狀態(tài)的變化,并做出相應(yīng)的響應(yīng)。在Qt編程中,這種對(duì)象間的通信就是采用信號(hào)與槽機(jī)制來(lái)實(shí)現(xiàn)的。Qt的信號(hào)與槽通信機(jī)制能夠完成任意兩個(gè)Qt對(duì)象之間的通信,其中,信號(hào)會(huì)在某個(gè)特定的情況或動(dòng)作下被觸發(fā),槽是等同于接收并處理信號(hào)的函數(shù)。在Qt中,每個(gè)對(duì)象都包含若干個(gè)預(yù)定義的信號(hào)和槽,當(dāng)某一個(gè)特定事件發(fā)生時(shí),一個(gè)信號(hào)被發(fā)送,與信號(hào)相關(guān)聯(lián)的槽則會(huì)響應(yīng)信號(hào)并完成相應(yīng)的處理。當(dāng)一個(gè)類被繼承時(shí),該類的信號(hào)和槽也同時(shí)被繼承。當(dāng)然,也可以根據(jù)需要自定義信號(hào)和槽。信號(hào)2、信號(hào)信號(hào)(signal)就是在特定情況下被發(fā)射(emit)的事件例如:例1.1中使用的clicked()信號(hào),就是QPushBotton按鈕被單擊時(shí)發(fā)射的“單擊”事件;例2.1中使用的nameChanged()信號(hào)是Student對(duì)象的屬性值發(fā)生變化時(shí)發(fā)射的“值變化”事件。在Qt中,信號(hào)通過(guò)關(guān)鍵字signals和信號(hào)函數(shù)在類的頭文件中聲明。如例2.1中的程序代碼:signals:voidnameChanged(QString);這里,signals是Qt的關(guān)鍵字,而非C++的關(guān)鍵字,它指出從此處進(jìn)入了信號(hào)聲明區(qū);信號(hào)函數(shù)nameChanged()定義了信號(hào)nameChanged,該信號(hào)在發(fā)射時(shí)會(huì)附帶一個(gè)QString類型的參數(shù)。信號(hào)函數(shù)中的參數(shù),就是對(duì)象之間通信時(shí)交換的數(shù)據(jù)槽3、槽槽(slot)就是對(duì)信號(hào)響應(yīng)的函數(shù)。槽函數(shù)和普通的C++成員函數(shù)一樣,可以定義在類的任何區(qū)域(public、private或protected),可以具有任何參數(shù),也可以被直接調(diào)用。不同的是,槽函數(shù)可以與一個(gè)或多個(gè)信號(hào)進(jìn)行關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號(hào)被發(fā)送時(shí),這個(gè)槽就會(huì)被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有默認(rèn)值。在Qt類的頭文件中,使用Qt的關(guān)鍵字slots標(biāo)識(shí)槽函數(shù)的聲明區(qū)。例如,例2.1中的程序代碼:publicslots:voidisNameChanged(QString);就是槽函數(shù)的聲明。Qt的槽就是一個(gè)普通的類成員函數(shù),除了在類的頭文件中聲明之外,還需要在類的實(shí)現(xiàn)文件中編寫(xiě)其實(shí)現(xiàn)代碼。關(guān)聯(lián)在Qt的信號(hào)與槽通信機(jī)制中,對(duì)象只負(fù)責(zé)發(fā)送信號(hào),它并不知道另一端是誰(shuí)在接收這個(gè)信號(hào);另外,一個(gè)槽也不知道是否有任何信號(hào)與自己相連接。將對(duì)象的信號(hào)與槽相關(guān)聯(lián),是實(shí)現(xiàn)對(duì)象間通信的關(guān)鍵。將信號(hào)與槽進(jìn)行關(guān)聯(lián),可以采用一對(duì)一、一對(duì)多或者多對(duì)一的形式,也可以將一個(gè)信號(hào)關(guān)聯(lián)到另外一個(gè)信號(hào)上。如圖2.7所示。在Qt中,信號(hào)與槽的關(guān)聯(lián)可以采用手動(dòng)的方式,也可以采用自動(dòng)的方式。1、手動(dòng)關(guān)聯(lián)信號(hào)與槽的手動(dòng)關(guān)聯(lián)通過(guò)調(diào)用QObject::connect()函數(shù)來(lái)實(shí)現(xiàn)。該函數(shù)原型如下:[static]QMetaObject::ConnectionQObject::connect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*method,Qt::ConnectionTypetype=Qt::AutoConnection)其中:參數(shù)sender和receiver都是指向QObject(或其子類)對(duì)象的指針,前者指向發(fā)送信號(hào)的對(duì)象,后者指向處理信號(hào)的對(duì)象,兩者分別被稱為“發(fā)送者”和“接收者”;參數(shù)signal

和method

都是字符指針,分別指向信號(hào)函數(shù)和槽函數(shù);參數(shù)type是一個(gè)Qt::ConnectionType枚舉類型值,表示信號(hào)與槽之間的關(guān)聯(lián)方式connect()函數(shù)的簡(jiǎn)略格式:connect(sender,SIGNAL(signal_function()),receiver,SLOT(slot_function()))其中,signal_function()和slot_function()分別表示sender對(duì)象中定義的信號(hào)函數(shù)和receiver對(duì)象中定義的槽函數(shù)。例如,例1.4程序中的語(yǔ)句:connect(ok,SIGNAL(triggered()),this,SLOT(close()));QObject類的connect()函數(shù)是一個(gè)重載函數(shù),在Qt1的幫助文檔中可以查詢到它的6種參數(shù)形式。例如下面的格式:[static]QMetaObject::ConnectionQObject::connect(constQObject*sender,constQMetaMethod&signal,constQObject*receiver,constQMetaMethod&method,Qt::ConnectionTypetype=Qt::AutoConnection)給出的原型聲明中,使用函數(shù)指針signal和method來(lái)指向信號(hào)函數(shù)和槽函數(shù)?!纠?.3】編寫(xiě)一個(gè)Qt應(yīng)用程序,在主窗口中模擬學(xué)生與老師的交流過(guò)程。如圖2.8所示,學(xué)生和老師分別在界面左、右側(cè)底部的文本編輯框中發(fā)送信息。(1)打開(kāi)QtCreator集成開(kāi)發(fā)環(huán)境,創(chuàng)建一個(gè)基于QWidget的Qt應(yīng)用程序,項(xiàng)目名稱為examp2_3。(2)雙擊項(xiàng)目中的widget.ui界面文件,打開(kāi)界面設(shè)計(jì)器。首先,將主窗口大小設(shè)置為400x200,標(biāo)題設(shè)置為“例2.3”;然后,在主窗口中放置2個(gè)“LineEdit”部件和2個(gè)“PlainTextEdit”部件,對(duì)象名稱分別為sLineEdit、tLineEdit和sPlainTextEdit、tPlainTextEdit(3)打開(kāi)Widget類的頭文件widget.h,聲明2個(gè)槽函數(shù)。代碼如下:(4)打開(kāi)Widget類的實(shí)現(xiàn)文件widget.cpp,添加槽函數(shù)實(shí)現(xiàn)代碼,并關(guān)聯(lián)信號(hào)與槽。代碼如下:(5)構(gòu)建并運(yùn)行程序。結(jié)果如圖2.8所示。這里使用connect()函數(shù)將信號(hào)與槽進(jìn)行手動(dòng)關(guān)聯(lián),信號(hào)和槽的設(shè)置采用了Qt的SIGNAL宏和SLOT宏也可以采用函數(shù)指針的參數(shù)形式來(lái)設(shè)置信號(hào)和槽,如下所示:2、自動(dòng)關(guān)聯(lián)信號(hào)與槽的自動(dòng)關(guān)聯(lián)是指不需要手動(dòng)使用connect()函數(shù),而是通過(guò)自動(dòng)命名槽函數(shù)的方式來(lái)實(shí)現(xiàn)信號(hào)與槽的關(guān)聯(lián)。在使用信號(hào)與槽的自動(dòng)關(guān)聯(lián)方式時(shí),槽函數(shù)的命名是關(guān)鍵。槽函數(shù)的原型格式為:voidon_<objectName>_<signalName>(<signalParameters>);其中,objectName表示發(fā)送信號(hào)的對(duì)象指針;signalName

表示信號(hào)名;signalParameters

表示發(fā)送信號(hào)時(shí)可能帶有的參數(shù)。信號(hào)與槽的自動(dòng)關(guān)聯(lián)通過(guò)元對(duì)象系統(tǒng)來(lái)實(shí)現(xiàn),實(shí)際上就是使用QMetaObject::connectSlotsByName()函數(shù)來(lái)代替QObject::connect()函數(shù)。該函數(shù)原型如下:[static]voidQMetaObject::connectSlotsByName(QObject*object)其中,參數(shù)object為QObject類或其子類的對(duì)象指針?!纠?.4】編寫(xiě)一個(gè)與例2.3功能相同的Qt應(yīng)用程序,使用自動(dòng)關(guān)聯(lián)方式連接相關(guān)的信號(hào)與槽。(1)打開(kāi)QtCreator集成開(kāi)發(fā)環(huán)境,創(chuàng)建一個(gè)基于QWidget的Qt應(yīng)用程序,項(xiàng)目名稱為examp2_4。(2)打開(kāi)界面設(shè)計(jì)器設(shè)計(jì)程序主窗口界面。如圖2.9所示。(3)右擊界面中的單行文本輸入框部件,在彈出的快捷菜單中選擇“Gotoslot…”菜單命令,如圖2.10所示;在接下來(lái)的“Selectsignal”對(duì)話框中選擇“editingFinished”信號(hào),如圖2.11所示。(4)單擊圖2.11中的“OK”按鈕,QtCreator為應(yīng)用程序的Widget類添加一個(gè)名為“on_sLineEdit_editingFinished()”的槽函數(shù)。如圖2.12所示。(5)用與上述(3)、(4)步驟中相同的方法,為應(yīng)用程序主窗口中的另一個(gè)單行文本輸入框部件添加槽函數(shù)。自動(dòng)添加的槽函數(shù)名稱為“on_tLineEdit_editingFinished()”。(6)將例2.3應(yīng)用程序的槽函數(shù)studentMessage()、teacherMessage()中的代碼復(fù)制到新添加的2個(gè)槽函數(shù)中。構(gòu)建并運(yùn)行程序,得到與例2.3應(yīng)用程序相同結(jié)果。2.4常用Qt工具類在Qt應(yīng)用開(kāi)發(fā)中,除了用于GUI界面設(shè)計(jì)的部件類之外,還需要使用一些工具類,例如Qt的字符串類、容器類,以及QVariant數(shù)據(jù)類等。字符串類1、字符串類標(biāo)準(zhǔn)C++提供了兩種字符串,一種是C語(yǔ)言風(fēng)格的以“\0”字符結(jié)尾的字符數(shù)組;另一種是字符串類String。在Qt中,使用QString類的對(duì)象來(lái)表示字符串。Qstring

使用Unicode編碼來(lái)存儲(chǔ)字符串,每一個(gè)字符都是一個(gè)16位的QChar,而不是8位的char。1、創(chuàng)建對(duì)象使用QString類的構(gòu)造方法創(chuàng)建Qt的字符串對(duì)象。例如:使用賦值運(yùn)行符(=或+=)重載函數(shù)通過(guò)賦值的方式來(lái)初始化字符串。例如:2、常用操作在QString類中定義了很多不同功能的成員函數(shù),使用這些函數(shù)可以對(duì)Qt中的字符串進(jìn)行處理。QString類的部分成員函數(shù)及功能如表2.8所示。3、轉(zhuǎn)換操作在QString類中定義了一些成員函數(shù),通過(guò)這些成員函數(shù)可以將字符串轉(zhuǎn)換為數(shù)值,也可以將數(shù)值字符串轉(zhuǎn)換為不同的進(jìn)制,還可以對(duì)字符串編碼、輸出格式等進(jìn)行轉(zhuǎn)換。表2.9給出了QString類中常用的轉(zhuǎn)換函數(shù)。4、查詢操作在QString類中定義了一些成員函數(shù),通過(guò)這些成員函數(shù)可以實(shí)現(xiàn)定位字符、提取子串、替換字符等相關(guān)操作。表2.10給出了QString類中部分常用的查詢相關(guān)操作函數(shù)。5、比較操作在Qt中,字符串的比較操作是通過(guò)QString類提

溫馨提示

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