




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、阜陽師范學(xué)院學(xué)生課程設(shè)計(jì)阜陽師范學(xué)院學(xué)生課程設(shè)計(jì) 課程名稱: 基于基于 QT 的嵌入式終端應(yīng)用程序開發(fā)的嵌入式終端應(yīng)用程序開發(fā) 作 者 : 侯侯 進(jìn)進(jìn) 指導(dǎo)老師: 周周 小小 波波 學(xué) 號(hào): 200840620110 目 錄摘 要.II關(guān)鍵詞.II1 前言.11.1 課題研究背景和意義.11.2 嵌入式軟件技術(shù)發(fā)展現(xiàn)狀與未來.11.2.1 標(biāo)志性的嵌入式產(chǎn)品已露頭角.11.2.2 嵌入式軟件技術(shù)面臨挑戰(zhàn).11.2.3 影響未來的若干軟件新技術(shù).21.3 課題研究?jī)?nèi)容.32 Linux 和 Qt 簡(jiǎn)介.32.1 Linux 主要特性.32.2 QT 開發(fā)工具簡(jiǎn)介.42.2.1 Qt 主要特性.4
2、2.2.2 Qt 編程機(jī)制簡(jiǎn)介.53 嵌入式終端應(yīng)用程序之記事本和電子相冊(cè)架構(gòu)設(shè)計(jì).73.1 記事本架構(gòu)設(shè)計(jì).73.1.1 記事本設(shè)計(jì)需求.73.1.2 記事本界面設(shè)計(jì).83.1.3 記事本結(jié)構(gòu)設(shè)計(jì).113.2 電子相冊(cè)架構(gòu)設(shè)計(jì).123.2.1 電子相冊(cè)設(shè)計(jì)需求.123.2.2 電子相冊(cè)界面設(shè)計(jì).133.2.3 電子相冊(cè)結(jié)構(gòu)設(shè)計(jì).154 算法設(shè)計(jì)和實(shí)現(xiàn).164.1 記事本主要算法設(shè)計(jì)和實(shí)現(xiàn).164.1.1 記事本類結(jié)構(gòu)設(shè)計(jì).164.1.2 記事本功能實(shí)現(xiàn).174.2 電子相冊(cè)主要算法設(shè)計(jì)和實(shí)現(xiàn).214.2.1 電子相冊(cè)類結(jié)構(gòu)設(shè)計(jì).214.2.2 電子相冊(cè)功能實(shí)現(xiàn).215 總結(jié)和展望.26參考文
3、獻(xiàn).28致 謝.29基于基于 QT 的嵌入式終端應(yīng)用程序開發(fā)的嵌入式終端應(yīng)用程序開發(fā)記事本和電子相冊(cè)開發(fā)記事本和電子相冊(cè)開發(fā)摘摘 要要越來越多的嵌入式終端需要一個(gè)圖形化的人機(jī)接口界面(GUI),良好的人機(jī)交互界面是嵌入式系統(tǒng)設(shè)計(jì)的一個(gè)關(guān)鍵技術(shù),尤其是在嵌入式手持設(shè)備中,對(duì)嵌入式終端的實(shí)用性、美觀性和視聽娛樂性提出了更高的要求。而記事本和電子相冊(cè)以其實(shí)用性和良好的觀賞性逐漸成為嵌入式設(shè)備中不可或缺的組成部分。開發(fā)基于嵌入式終端的界面美觀、功能豐富、交互性好的記事本和電子相冊(cè),具有一定的實(shí)用意義和價(jià)值。本文的目標(biāo)是設(shè)計(jì)和實(shí)現(xiàn)嵌入式終端下的記事本和電子相冊(cè)。論文首先介紹了Linux 的優(yōu)點(diǎn)和 Qt
4、開發(fā)環(huán)境的搭建,著重分析了 Qt 在軟件開發(fā)中的編程機(jī)制。并根據(jù)嵌入式應(yīng)用的特點(diǎn)對(duì)嵌入式終端下的記事本和電子相冊(cè)進(jìn)行了設(shè)計(jì)需求分析、具體界面的設(shè)計(jì)和整體結(jié)構(gòu)的設(shè)計(jì)。本課題根據(jù)記事本和電子相冊(cè)的算法,設(shè)計(jì)并實(shí)現(xiàn)了記事本的相關(guān)功能(如:新建、打開、編輯和刪除文件等)和電子相冊(cè)的相關(guān)功能(如:圖片放大、縮小、旋轉(zhuǎn)和移動(dòng)等)。最后對(duì)關(guān)于論文進(jìn)一步工作的方向進(jìn)行了簡(jiǎn)要的討論。關(guān)鍵詞嵌入式 Linux; Qt; 圖形用戶界面; 記事本; 電子相冊(cè)1.前言前言1.1. 課題研究背景和意義隨著嵌入式產(chǎn)品的發(fā)展,往往要求嵌入式操作系統(tǒng)有網(wǎng)絡(luò)和圖形的功能。利用源代碼開放的 Linux 搭建的嵌入式操作系統(tǒng),由于強(qiáng)
5、大的網(wǎng)絡(luò)功能和低成本,近來得到了越來越多的應(yīng)用。其能夠提供全功能的桌面計(jì)算,定制非常方便并且支持大多數(shù)嵌入式系統(tǒng)上使用的芯片,包括 Strong ARM,MIPS 和 Power PC 等。在嵌入式 Linux 操作系統(tǒng)上使用一個(gè)功能完備的輕量級(jí)、高性能、高可靠、可配置的 GUI 系統(tǒng)成為可行的解決方案(丁丁,2004)。雖然市場(chǎng)上現(xiàn)在已經(jīng)有了眾多的優(yōu)秀的 GUI 應(yīng)用軟件,但隨著近年來計(jì)算機(jī)技術(shù)的迅速發(fā)展,當(dāng)新硬件、新技術(shù)出現(xiàn)時(shí),計(jì)算機(jī)的體系結(jié)構(gòu)、指令系統(tǒng)和操作系統(tǒng)都可能發(fā)生相應(yīng)的改變,這勢(shì)必會(huì)導(dǎo)致一部分應(yīng)用軟件在新環(huán)境下無法正常運(yùn)行。如果舍棄原有軟件而重新開發(fā),將會(huì)耗費(fèi)大量的人力和資金,而
6、且浪費(fèi)了許多成熟的軟件成果。而 Qt 在源代碼級(jí)上實(shí)現(xiàn)了跨平臺(tái)特性,極大的支持了跨平臺(tái)通用軟件的開發(fā)。Qt可以用同一個(gè)源程序在不同平臺(tái)上編譯鏈接,生成目標(biāo)代碼,并取得相同的運(yùn)行效果,稱為“一次編寫,隨處編譯”,利用這種方法充分實(shí)現(xiàn)了程序的跨平臺(tái)運(yùn)行。這種基于源代碼的跨平臺(tái)特性不僅解決了性能的問題,而且可以發(fā)揮各個(gè)平臺(tái)的優(yōu)勢(shì),充分利用每個(gè)平臺(tái)自身的特點(diǎn);并且即可以在新環(huán)境下實(shí)現(xiàn)原有軟件的功能和特點(diǎn),減少開發(fā)費(fèi)用,還可以改進(jìn)原有軟件的不足,增加新的需求,從而提高軟件的質(zhì)量,延長(zhǎng)軟件生命期。因此,利用 Linux 下基于 Qt 的嵌入式終端應(yīng)用程序開發(fā)是一個(gè)非常有意義的課題,具有重要的研究和商業(yè)價(jià)值
7、。1.2.嵌入式軟件技術(shù)發(fā)展現(xiàn)狀與未來嵌入式軟件技術(shù)發(fā)展現(xiàn)狀與未來1.2.1 標(biāo)志性的嵌入式產(chǎn)品已露頭角全過程自動(dòng)化產(chǎn)品制造、大范圍電子商務(wù)活動(dòng)、高度協(xié)同科學(xué)實(shí)驗(yàn)以及現(xiàn)代化家庭起居,為嵌入式產(chǎn)品造就了嶄新而巨大的商機(jī)。除了溝通信息高速公路的交換機(jī)、路由器和 Modem,構(gòu)建 CIMS 所需的 DCS 和機(jī)器人以及規(guī)模較大的家用汽車電子系統(tǒng)。最有量產(chǎn)效益和時(shí)代特征的嵌入式產(chǎn)品應(yīng)數(shù)因特網(wǎng)上的信息家電(Internet Appliances),如 Web 可視電話、Web 游戲機(jī)、Web PDA(俗稱電子商務(wù)、商務(wù)通)、WAP 電話手機(jī)、以及多媒體產(chǎn)品,如 STB(電視機(jī)頂盒)、DVD 播放機(jī)、電子
8、閱讀機(jī)。1.2.2 嵌入式軟件技術(shù)面臨挑戰(zhàn)以信息家電為代表的互聯(lián)網(wǎng)時(shí)代嵌入式產(chǎn)品,不僅為嵌入式市場(chǎng)展現(xiàn)了美好前景,注入了新的生命;同時(shí)也對(duì)嵌入式系統(tǒng)技術(shù),特別是軟件技術(shù)提出新的挑戰(zhàn)。這主要包括:支持日趨增長(zhǎng)的功能密度、靈活的網(wǎng)絡(luò)聯(lián)接、輕便的移動(dòng)應(yīng)用和多媒體的信息處理,此外,當(dāng)然還需對(duì)付更加激烈的市場(chǎng)競(jìng)爭(zhēng)。主要從以下幾個(gè)方面體現(xiàn)出來:(1) 嵌入式應(yīng)用軟件的開發(fā)需要強(qiáng)大的開發(fā)工具和操作系統(tǒng)的支持隨著因特網(wǎng)技術(shù)的成熟、帶寬的提高,ICP 和 ASP 在網(wǎng)上提供的信息內(nèi)容日趨豐富、應(yīng)用項(xiàng)目多種多樣。像電話手機(jī)、電話座機(jī)及電冰箱、微波爐等嵌入式電子設(shè)備的功能不再單一,電氣結(jié)構(gòu)也更為復(fù)雜。為了滿足應(yīng)用功
9、能的升級(jí),設(shè)計(jì)師們一方面采用更強(qiáng)大的嵌入式處理器如 32 位、64 位 RISC 芯片或信號(hào)處理器 DSP 增強(qiáng)處理能力;同時(shí)還采用實(shí)時(shí)多任務(wù)編程技術(shù)和交叉開發(fā)工具技術(shù)來控制功能復(fù)雜性,簡(jiǎn)化應(yīng)用程序設(shè)計(jì)、保障軟件質(zhì)量和縮短開發(fā)周期。(2)聯(lián)網(wǎng)成為必然趨勢(shì)為適應(yīng)嵌入式分布處理結(jié)構(gòu)和應(yīng)用上網(wǎng)需求,面向 21 世紀(jì)的嵌入式系統(tǒng)要求配備標(biāo)準(zhǔn)的一種或多種網(wǎng)絡(luò)通信接口。針對(duì)外部聯(lián)網(wǎng)要求,嵌入設(shè)備必需配有通信接口,相應(yīng)需要 TCPIP 協(xié)議簇軟件支持;由于家用電器相互關(guān)聯(lián)(如防盜報(bào)警,燈光能源控制,影視設(shè)備和信息終端交換信息)及實(shí)驗(yàn)現(xiàn)場(chǎng)儀器的協(xié)調(diào)工作等要求,新一代嵌入式設(shè)備還需具備 IEEE1394、USB
10、、CAN、Bluetooth 或 IrDA 通信接口,同時(shí)也需要提供相應(yīng)的通信組網(wǎng)協(xié)議軟件和物理層驅(qū)動(dòng)軟件。為了支持應(yīng)用軟件的特定編程模式,如 Web或無線 Web 編程模式,還需要相應(yīng)的瀏覽器,如 HTML、WML 等。(3)支持小型電子設(shè)備實(shí)現(xiàn)小尺寸、微功耗和低成本為滿足這種特性,要求嵌入式產(chǎn)品設(shè)計(jì)者相應(yīng)降低處理器的性能,限制內(nèi)存容量和復(fù)用接口芯片。這就相應(yīng)提高了對(duì)嵌入式軟件設(shè)計(jì)技術(shù)要求。如,選用最佳的編程模型和不斷改進(jìn)算法(孫瓊,2004)。(4)提供精巧的多媒體人機(jī)界面嵌入式設(shè)備之所以為億萬用戶樂于接受,重要因素之一是它們與使用者之間的親和力,自然的人機(jī)交互界面,如司機(jī)操縱高度自動(dòng)化的
11、汽車主要還是通過習(xí)慣的方向盤、腳踏板和操縱桿。人們與信息終端交互要求以 GUI 屏幕為中心的多媒體界面。手寫文字輸入、語音撥號(hào)上網(wǎng),收發(fā)電子郵件以及彩色圖形、圖像已取得初步成效。1.2.3 影響未來的若干軟件新技術(shù)(1) 日趨流行的行業(yè)性開放系統(tǒng)和備受青睞的自由軟件技術(shù)為了對(duì)付日趨激烈的國(guó)際市場(chǎng)競(jìng)爭(zhēng)勢(shì)態(tài),設(shè)計(jì)技術(shù)共享和軟件重用、構(gòu)件兼容、維護(hù)方便和合作生產(chǎn)是增強(qiáng)行業(yè)性產(chǎn)品競(jìng)爭(zhēng)能力的有效手段。走行業(yè)開放系統(tǒng)道路是加快嵌入式軟件技術(shù)發(fā)展的捷徑之一。國(guó)際上自由軟件運(yùn)動(dòng)的順利發(fā)展,GPL 概念正對(duì)嵌入式軟件產(chǎn)業(yè)深遠(yuǎn)影響。嵌入式 Linux 多種原型的提出,和 GNU 軟件開發(fā)工具軟件的實(shí)用化進(jìn)展,正為
12、我國(guó)加快發(fā)展嵌入式軟件技術(shù)提供了極好機(jī)遇和條件。(2) 無線網(wǎng)絡(luò)操作系統(tǒng)初見端倪未來移動(dòng)通信網(wǎng)絡(luò)不僅能夠提供豐富的多媒體數(shù)據(jù)業(yè)務(wù),而且能夠支持更多功能和更強(qiáng)的移終端設(shè)備。為了有效地發(fā)揮第三代移動(dòng)通信系統(tǒng)的優(yōu)勢(shì),許多設(shè)備廠商針對(duì)未來移動(dòng)設(shè)備的特點(diǎn)努力開發(fā)無線網(wǎng)絡(luò)操作系統(tǒng)(M. Tim Jones, 2008)。(3) IP 構(gòu)件庫(kù)技術(shù)正在造就一個(gè)新興的軟件行業(yè)嵌入式系統(tǒng)實(shí)現(xiàn)的最高形式是單一芯片系統(tǒng)(SOC,System On Chip),而 SOC 的核技術(shù)是 IP 核(即知識(shí)產(chǎn)權(quán)核 Intellectual Property Kernels)構(gòu)件。IP 核有硬件核、軟件核和固件核,硬件核主要指
13、 8/16/32/64 位 MPU 核或 DSP 核。硬件提供商以數(shù)據(jù)軟件庫(kù)的形式,將其久經(jīng)驗(yàn)證的處理器邏輯和芯片版圖數(shù)據(jù),供 EDA 工具調(diào)用在芯片上直接配置 MPU/DSP 功能單元;而軟件核則是軟件提供商將 SOC 所需的 RTOS 內(nèi)核軟件或其它功能軟件,如通信協(xié)議軟件,F(xiàn)AX 功能軟件等構(gòu)件標(biāo)準(zhǔn) API 方式和 IP 核構(gòu)件形式供 IDE 和 EDA 工具調(diào)用制成 FLASH 或 ROM 可執(zhí)行代碼單元,加速 SOC 嵌入式系統(tǒng)定制或開發(fā)。目前一些嵌入式軟件供應(yīng)商紛紛把成熟的 RTOS 內(nèi)核和功能擴(kuò)展件,以軟件 IP 核構(gòu)件形式出售,如 Microtec 的 VRTXoc for A
14、RM 就是典型例子。正在興啟的IP 構(gòu)件軟件技術(shù)正為一大批高智小型軟件公司提供發(fā)展機(jī)遇。1.3.課題研究?jī)?nèi)容針對(duì)嵌入式產(chǎn)品的高度個(gè)性化,其外觀、與用戶交互的界面千差萬別的特點(diǎn),故而系統(tǒng)的設(shè)計(jì)目標(biāo)是意在打造一個(gè)能在嵌入式終端運(yùn)行、通用的、可以方便的支持各種控件、各種圖形格式,具有體積小、可裁剪、可移植的這樣一個(gè)面向嵌入式的應(yīng)用程序系統(tǒng),使各種嵌入式設(shè)備也同樣能具有美觀的用戶界面,相對(duì)比較豐富的功能,操作起來簡(jiǎn)單而又直觀。本文通過對(duì)嵌入式 Linux 和 Qt 的分析,在嵌入式 Qt 的基礎(chǔ)上,開發(fā)了面向嵌入式終端的記事本和電子相冊(cè)應(yīng)用軟件。記事本不僅支持英文輸入和顯示,而且支持中文和日文的顯示,
15、還支持記事本文件的瀏覽、編輯、刪除等功能。電子相冊(cè)不僅支持中、英、日文圖片名字的顯示,還支持如放大、縮小、旋轉(zhuǎn)等各種方式下的圖片瀏覽。它們體積小,移植方便,適用于掌上電腦、智能電話及一些高端的嵌入式設(shè)備中。此外它作為一種小型 GUI 解決方案,可用于那些對(duì) GUI 大小要求苛刻的各種應(yīng)用系統(tǒng)中。1 Linux 和 Qt 簡(jiǎn)介2.1 Linux 主要特性Linux 是個(gè)和 Unix 相似、以 Unix 核心為基礎(chǔ)、完全內(nèi)存保護(hù)、多任務(wù)多進(jìn)程的操作系統(tǒng)。支持廣發(fā)的計(jì)算機(jī)硬件,包括X86,Alpha,Sparc,MIPS,PPC,ARM,NEC 等現(xiàn)有的大部分芯片。程式源碼全部公開,任何人可以修改并
16、在 GNU 通用公共許可證(GNU General Public License)下發(fā)行(陳英和梁建武,2008),這樣,開發(fā)人員可以對(duì)操作系統(tǒng)進(jìn)行定制,再也不必?fù)?dān)心像MS windows 操作系統(tǒng)中后門的威脅。同時(shí)由于有 GPL 的控制,大家開發(fā)的東西大都相互兼容,不會(huì)走向分裂之路。Linux 用戶遇到問題時(shí)可以通過 Internet 向網(wǎng)上成千上萬的 Linux 開發(fā)者請(qǐng)教,這使最困難的問題也有辦法解決。Linux 帶有 Unix 用戶熟悉的完善的開發(fā)工具,幾乎所有的 Unix 系統(tǒng)的應(yīng)用軟件都已移植到了 Linux 上。Linux 還提供了強(qiáng)大的網(wǎng)絡(luò)功能,有多種可選擇窗口管理器(X wi
17、ndows)。其強(qiáng)大的語言編譯器 gcc、g+等也可以很容易得到。不但成熟完善、而且使用方便,為嵌入操作系統(tǒng)提供了一個(gè)極有吸引力的選擇。Linux 已經(jīng)被移植到多種硬件平臺(tái),這對(duì)受開銷、時(shí)間限制的研究與開發(fā)項(xiàng)目是很有吸引力的。原型可以在標(biāo)準(zhǔn)平臺(tái)上開發(fā)然后移植到具體的硬件上,加快了軟件與硬件的開發(fā)過程。Linux 還有以下優(yōu)點(diǎn):(1) Linux 可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系。(2) 它是免費(fèi)的,源代碼可以得到。這是最吸引人的。毫無疑問,這會(huì)節(jié)省大量的開發(fā)費(fèi)用。(3) 它本身內(nèi)置網(wǎng)絡(luò)支持。(4) Linux 的高度模塊化使添加部件非常容易。(5) Linux 在臺(tái)式機(jī)上的成
18、功,使大家看到了 linux 在嵌入式系統(tǒng)中的輝煌前景。嵌入式產(chǎn)品中選擇什么樣的操作系統(tǒng)極為重要,嵌入式 Linux 由于其開源特性、實(shí)時(shí)性好、可移植、內(nèi)置網(wǎng)絡(luò)支持等優(yōu)點(diǎn)在嵌入式領(lǐng)域成為主力軍。如今,業(yè)界已經(jīng)達(dá)成共識(shí):即嵌入式 linux 是大勢(shì)所趨,其巨大的市場(chǎng)潛力與醞釀的無限商機(jī)必然會(huì)吸引眾多的廠商進(jìn)入這一領(lǐng)域。2.2 Qt 開發(fā)工具簡(jiǎn)介2.2.1 Qt 主要特性Qt 是一個(gè)跨平臺(tái)的 C+圖形用戶界面庫(kù),由挪威 TrollTech 公司開發(fā),目前包括Qt/X11、基于 Framebuffer 的 Qt/Embedded、快速開發(fā)工具 Qt Designer 以及國(guó)際化工具Qt Lingui
19、st 等。人們所熟知的 Linux 下面的 KDE 環(huán)境就是基于 Qt 開發(fā)而成的。Qt 支持 Unix 和 Linux 系統(tǒng)以及 Windows 系統(tǒng)。Qt 的主要特點(diǎn)有: 面向?qū)ο螅?很容易擴(kuò)展, 并且允許真正的組件編程; Qt 對(duì)各個(gè)模塊進(jìn)行了良好的封裝,使各模塊可重用性較好;優(yōu)良的跨平臺(tái)特性, 使用 Qt 類編寫的程序可以實(shí)現(xiàn) “一次編碼,到處編譯”,極大的降低了跨平臺(tái)開發(fā)的難度(丁丁等,2004);構(gòu)件支持, 對(duì)于對(duì)象間通信,Qt 沒有采用函數(shù)回調(diào)的方法,而是采用了一種全新并且可選的被稱為“信號(hào)與槽” 的對(duì)象間通信機(jī)制,通過一個(gè)對(duì)象信號(hào)的發(fā)射,另一個(gè)槽函數(shù)的響應(yīng),使各個(gè)對(duì)象之間的通信
20、安全而且高效。 Qt 的這些特點(diǎn)使它非常適合于真正的構(gòu)件編程, 同時(shí)使各個(gè)組件之間的協(xié)同工作變得十分簡(jiǎn)單,并且 Qt 是直接基于 Xlib 的,不依賴 Motif 工具包, 所以它的執(zhí)行效率比一般的基于平臺(tái)的代碼的執(zhí)行效率要高。2.2.2 Qt 編程機(jī)制簡(jiǎn)介(1) Qt 系統(tǒng)的信號(hào)與槽機(jī)制簡(jiǎn)介 信號(hào)/槽機(jī)制是 Qt 的一個(gè)中心特征并且也許是 Qt 與其它工具包的最不相同的部分。在圖形用戶界面編程中,我們經(jīng)常希望一個(gè)窗口部件的一個(gè)變化被通知給另一個(gè)窗口部件(張娟,張雪蘭,2007)。更一般地,我們希望任何一類的對(duì)象可以和其它對(duì)象進(jìn)行通訊。較老的工具包使用一種被稱作回調(diào)的通訊方式來實(shí)現(xiàn)同一目的?;?/p>
21、調(diào)是指一個(gè)函數(shù)的指針,所以如果你希望一個(gè)處理函數(shù)通知你一些事件,你可以把另一個(gè)函數(shù)(回調(diào))的指針傳遞給處理函數(shù)。處理函數(shù)在適當(dāng)?shù)臅r(shí)候調(diào)用回調(diào)(倪繼利,2006)。回調(diào)有兩個(gè)主要缺點(diǎn)。首先他們不是類型安全的。我們從來都不能確定處理函數(shù)使用了正確的參數(shù)來調(diào)用回調(diào)。因此容易造成進(jìn)程崩潰,另外一個(gè)問題是,回調(diào)這種方式緊緊的綁定了圖形用戶接口的功能元素,因而很難把開發(fā)進(jìn)行獨(dú)立的分類。Qt 的信號(hào)與槽機(jī)制是不同的。Qt 的信號(hào)與槽均以函數(shù)形式出現(xiàn),Qt 的窗口部件有很多預(yù)定義的信號(hào),但我們也可以通過繼承來加入我們自己的信號(hào)。槽就是一個(gè)可以被調(diào)用處理特定信號(hào)的函數(shù)。Qt 的窗口部件有很多預(yù)定義的槽,但是通常
22、的習(xí)慣是你可以加入自己的槽,這樣你就可以處理你所感興趣的信號(hào)。我們可以用 connect()函數(shù)對(duì)需要的信號(hào)和槽進(jìn)行連接。當(dāng)對(duì)象的內(nèi)部狀態(tài)發(fā)生改變,信號(hào)就被發(fā)射。從某種意義上講,它們也許對(duì)外面的世界感興趣。這就是所有的對(duì)象通訊時(shí)所做的一切。它不知道也不注意無論有沒有東西接收它所發(fā)射的信號(hào)。當(dāng)一個(gè)信號(hào)被發(fā)射,它所連接的槽會(huì)被立即執(zhí)行,就像一個(gè)普通函數(shù)調(diào)用一樣(見圖 1)。信號(hào)/槽機(jī)制完全不依賴于任何一種圖形用戶界面的事件回路。當(dāng)所有的槽都返回后發(fā)射的信號(hào)也將返回。信號(hào)與插槽機(jī)制并不要求類之間互相知道細(xì)節(jié),這樣就可以相對(duì)容易的開發(fā)出代碼可高重用的類(Matthias Dalheimer,2002)
23、。信號(hào)和槽的機(jī)制是類型安全的:一個(gè)信號(hào)的簽名必須與它的接收槽的簽名相匹配。(實(shí)際上一個(gè)槽的簽名可以比它接收的信號(hào)的簽名少,因?yàn)樗梢院雎灶~外的簽名。)因?yàn)楹灻且恢碌?,編譯器就可以幫助我們檢測(cè)類型不匹配。它以警告的方式報(bào)告類型錯(cuò)誤,而不會(huì)使系統(tǒng)產(chǎn)生崩潰。信號(hào)和槽是寬松地聯(lián)系在一起的:一個(gè)發(fā)射信號(hào)的類不用知道也不用注意哪個(gè)槽要接收這個(gè)信號(hào)(Johan Thelin,2007)。Qt 的信號(hào)和槽的機(jī)制可以保證如果你把一個(gè)信號(hào)和一個(gè)槽連接起來,槽會(huì)在正確的時(shí)間使用信號(hào)的參數(shù)而被調(diào)用。信號(hào)和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的:不會(huì)再有回調(diào)核心轉(zhuǎn)儲(chǔ)(core dump)。你可以把許
24、多信號(hào)和你所希望的單一槽相連,并且一個(gè)信號(hào)也可以和你所期望的許多槽相連。把一個(gè)信號(hào)和另一個(gè)信號(hào)直接相連也是可以的。(這時(shí),只要第一個(gè)信號(hào)被發(fā)射時(shí),第二個(gè)信號(hào)立刻就被發(fā)射。)總體來看,信號(hào)和槽構(gòu)成了一個(gè)強(qiáng)有力的組件編程機(jī)制。如果一個(gè)類要使用信號(hào)與槽機(jī)制,它就必須是從 QObject 或 QObject 的子類繼承,而且類的定義必須加上 Q_OBJECT 宏。signals、slots 和 emit 是 Qt 特有的關(guān)鍵字,分別用來表示信號(hào)、槽、和發(fā)送信號(hào),移除這些關(guān)鍵字和預(yù)處理程序,就可以使用標(biāo)準(zhǔn)的 C+編譯器。槽同其他函數(shù)一樣也具有訪問權(quán)限,只是槽的訪問權(quán)限決定了誰可以和它相連,如一個(gè) pub
25、lic slots:包含了任何信號(hào)都可以相連的槽(Andrew Krause,2007) 。一個(gè) protected slots:包含了只有這個(gè)類和它的子類的信號(hào)才能連接的槽。這就是說這些槽只是類的實(shí)現(xiàn)的一部分,而不是它和外界的接口。 一個(gè) private slots:包含了只有這個(gè)類本身的信號(hào)可以連接的槽,甚至它的子類都沒有獲得連接的權(quán)利。圖圖 1 信號(hào)和槽的連接原理圖信號(hào)和槽的連接原理圖Fig. 1 Signal and slot connection scheme(2) Qt 元對(duì)象系統(tǒng)Qt 中的元對(duì)象系統(tǒng)是用來處理對(duì)象間通訊的信號(hào)/槽機(jī)制、運(yùn)行時(shí)的類型信息和動(dòng)態(tài)屬性系統(tǒng)。它基于下列三類
26、:QObject 類、類聲明中的私有段中的 Q_OBJECT 宏、元對(duì)象編譯器(moc)。moc 讀取 C+源文件。如果它發(fā)現(xiàn)其中包含一個(gè)或多個(gè)類的聲明中含有Q_OBJECT 宏,它就會(huì)給含有 Q_OBJECT 宏的類生成另一個(gè)含有元對(duì)象代碼的 C+源文件。這個(gè)生成的源文件可以被類的源文件包含(#include)到或者和這個(gè)類的實(shí)現(xiàn)一起編譯和連接。 除了提供對(duì)象間通訊的信號(hào)和槽機(jī)制之外(介紹這個(gè)系統(tǒng)的主要原因),QObject中的元對(duì)象代碼實(shí)現(xiàn)其它特征: (1) className()函數(shù)在運(yùn)行的時(shí)候以字符串返回類的名稱,不需要 C+編譯器中的本地運(yùn)行類型信息(RTTI)的支持。 (2) in
27、herits()函數(shù)返回這個(gè)對(duì)象是否是一個(gè)繼承于 QObject 繼承樹中一個(gè)特定類的類的實(shí)例。 (3) tr()和 trUtf8() 兩個(gè)函數(shù)是用于國(guó)際化中的字符串翻譯。 (4) setProperty()函數(shù)和 property()函數(shù),這兩個(gè)函數(shù)是用來通過名稱動(dòng)態(tài)設(shè)置和獲得對(duì)象屬性的。 (5) metaObject()函數(shù)返回這個(gè)類所關(guān)聯(lián)的元對(duì)象。 雖然使用 QObject 作為一個(gè)基類而不使用 Q_OBJECT 宏和元對(duì)象代碼是可以的,但是如果 Q_OBJECT 宏沒有被使用,那么這里的信號(hào)和槽以及其它特征描述都不會(huì)被提供。根據(jù)元對(duì)象系統(tǒng)的觀點(diǎn),一個(gè)沒有元代碼的 QObject 的子類
28、和它含有元對(duì)象代碼的最近的祖先相同。舉例來說就是,className()將不會(huì)返回你的類的實(shí)際名稱,返回的是它的這個(gè)祖先的名稱。故強(qiáng)烈建議 QObject 的所有子類使用 Q_OBJECT 宏,而不管它們是否實(shí)際使用了信號(hào)、槽和屬性(Jonathan Corbet, 2005)。 2 嵌入式終端應(yīng)用程序之記事本和電子相冊(cè)架構(gòu)設(shè)計(jì)目前市場(chǎng)上嵌入式手持設(shè)備,320*240 的解析度基本滿足了人們對(duì)顯示畫面大小及圖像清晰度的要求,逐漸占領(lǐng)了市場(chǎng)主流。故記事本和電子相冊(cè)界面大小設(shè)定 320*240,并且記事本和電子相冊(cè)均支持鍵盤控制操作和點(diǎn)擊(PC 機(jī)上鼠標(biāo)點(diǎn)擊,嵌入式設(shè)備的觸摸屏點(diǎn)擊)控制操作。特色
29、是界面語言支持中文、英文、日文三種語言的顯示。3.1 記事本架構(gòu)設(shè)計(jì)3.1.1 記事本設(shè)計(jì)需求記事本可以將目錄下的記事本文件以文件名列表的形式顯示出來,并可以實(shí)現(xiàn)記事本文件的新建、打開、編輯和刪除等功能;記事本可以根據(jù)文件內(nèi)容的多少來實(shí)現(xiàn)文本的滾動(dòng)顯示,并可以通過軟鍵盤對(duì)文本進(jìn)行編輯等。(1) 文件列表功能:記事本的文件列表用于顯示記事本文件名,并且當(dāng)記事本文件名過長(zhǎng)時(shí)進(jìn)行文件名長(zhǎng)度顯示的控制。當(dāng)文件數(shù)目多于當(dāng)前界面顯示范圍,則出現(xiàn)上下方向的滾動(dòng)條,可以向上或向下滾動(dòng)顯示文件名。(2) 文件名選中顯示功能:在文件列表上被選中的文件名高亮顯示。(3) 新建文件功能:新建記事本文件時(shí),提示輸入文件
30、名,如果沒有輸入文件名而選擇直接進(jìn)入文件編輯界面,系統(tǒng)則提供默認(rèn)的文件名用于存儲(chǔ)文件。編輯新建文件時(shí),文件名在編輯界面上方顯示。(4) 控制文本編輯格式功能:編輯文件時(shí),文本內(nèi)容輸入到當(dāng)前界面的右端邊界處自動(dòng)換行,也可以利用鍵盤操作執(zhí)行換行動(dòng)作。輸入的文本內(nèi)容多于當(dāng)前屏幕顯示范圍時(shí)出現(xiàn)縱向滾動(dòng)條,隨著文本輸入滾動(dòng)顯示內(nèi)容。保存文件后,文件名立即顯示在文件列表上。(5) 打開文件功能:根據(jù)文件列表選擇打開指定的文件,打開指定文件時(shí),顯示打開文件的文件內(nèi)容在文件編輯界面上,文件內(nèi)容過多時(shí)可以滾動(dòng)顯示,并在文件編輯界面的上方滾動(dòng)顯示打開的文件的文件名。(6) 文件內(nèi)容編輯和顯示功能:在文件編輯界面上
31、可以對(duì)文件的內(nèi)容進(jìn)行編輯和修改。如果文件內(nèi)容多于當(dāng)前屏幕顯示范圍的話,出現(xiàn)縱向滾動(dòng)條,可以滾動(dòng)顯示當(dāng)前文件的文件內(nèi)容。(7) 打開下一個(gè)文件功能:在當(dāng)前打開文件列表界面,若選擇“打開一個(gè)文件”功能,則顯示下一個(gè)文件的內(nèi)容在文件編輯區(qū)。(8) 文件內(nèi)容修改提示功能:若在打開的文件中對(duì)其內(nèi)容進(jìn)行了修改,在關(guān)閉文件時(shí)將會(huì)提示文件的內(nèi)容已經(jīng)被修改的消息,用戶可選擇是否保存修改后的內(nèi)容。(9) 刪除文件功能:可以在文件列表上對(duì)指定文件進(jìn)行刪除操作,也可以打開文件后,對(duì)打開的文件進(jìn)行刪除操作。選擇刪除文件操作時(shí),會(huì)出現(xiàn)確定文件刪除的提示,如果此時(shí)放棄刪除操作,則文件不會(huì)被刪除,否則文件將會(huì)被徹底刪除,即從
32、物理設(shè)備上被刪除。文件被刪除后,文件列表上該文件名被移除。(10) 軟鍵盤輸入功能:軟鍵盤支持英文輸入,Cap 鍵支持大小寫英文切換,提供 Shift 鍵的上下字符切換功能,Enter 可以進(jìn)行回車換行,其 ESC 鍵執(zhí)行軟鍵盤退出功能。軟鍵盤上的按鍵與物理鍵盤的按鍵位置相對(duì)應(yīng)。(11) 給用戶提供友好的圖形用戶界面,并合理安排界面元素布局,使其交互性好且方便用戶操作。3.1.2 記事本界面設(shè)計(jì)記事本主要界面設(shè)計(jì)記事本主要界面設(shè)計(jì): (1) 文件列表界面:如圖 2 所示,界面大小為 320*240。界面上方提供記事本圖標(biāo)和記事本文字標(biāo)簽,中間的顯示區(qū)域顯示記事本文件列表。界面的最下方為兩個(gè)按鈕
33、,左側(cè)的是功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Option”和“Exit”。文件列表中文件以文件創(chuàng)建時(shí)間排序,將要進(jìn)行操作的文件名高亮顯示。圖圖 2 文件列表界面文件列表界面Fig. 2 File list interface(2) 新建文件編輯界面:如圖 3 所示,界面大小為 320*240。界面上方顯示記事本圖標(biāo)和新建文件的文件名,如果沒有輸入文件名則不顯示。中間的顯示區(qū)域?yàn)槲募庉媴^(qū),用于接收文本的輸入。界面的最下方左側(cè)為功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Option”和“Save”。 圖圖 3 新建文件編輯界面新建文件編輯界面Fig. 3 New docume
34、nt editing interface(3) 打開文件內(nèi)容顯示界面:如圖 4 所示,界面大小為 320*240。界面上方顯示記事本圖標(biāo)和打開的文件的文件名,中間的顯示區(qū)域?yàn)槲募?nèi)容顯示區(qū),可以接受文本的編輯和修改。界面的最下方左側(cè)為功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Option”和“Back”。圖圖 4 文件打開界面文件打開界面Fig. 4 Documents open interface記事本功能菜單設(shè)計(jì):記事本功能菜單設(shè)計(jì):如圖 5 所示,記事本功能菜單大小要小于記事本主要界面的大小,根據(jù)具體條目的數(shù)量來調(diào)整為合適的大小。菜單上顯示可操作的功能選項(xiàng),并對(duì)選定的功能選項(xiàng)高亮顯
35、示。界面的最下方左側(cè)為功能按鈕,右側(cè)的是返回按鈕,菜單中分別標(biāo)記為“Select”和“Back”。圖圖 5 功能菜單功能菜單Fig. 5 Function menu記事本消息提示框設(shè)計(jì):記事本消息提示框設(shè)計(jì): 如圖 6 所示,消息提示框界面大小為 320*160。消息提示框的顯示區(qū)域顯示提示動(dòng)畫和提示的內(nèi)容。界面的最下方左側(cè)為功能按鈕,右側(cè)的是返回按鈕,此界面中分別標(biāo)記為“Yes”和“No”。圖圖 6 消息提示框消息提示框Fig. 6 Messagebox 相鄰兩個(gè)界面之間切換時(shí),若后出現(xiàn)的界面大小小于先出現(xiàn)的界面大小,則第一個(gè)界面顯示蒙版即表示為禁用狀態(tài),如圖 5 和圖 6。記事本軟鍵盤界面
36、設(shè)計(jì):記事本軟鍵盤界面設(shè)計(jì):如圖 7 所示,軟鍵盤需要對(duì)文本編輯區(qū)進(jìn)行輸入操作,所以軟鍵盤界面盡量要小一些,以免影響了文本編輯區(qū)的使用,但同時(shí)也需要保證軟鍵盤上字符的清晰顯示,故軟鍵盤界面大小為設(shè)定為 320*130。按鍵布局與物理鍵盤基本一致,按鍵布局美觀,同時(shí)鍵盤的邊緣相對(duì)寬一些,便于鍵盤的移動(dòng)。 圖圖 7 軟鍵盤界面軟鍵盤界面Fig . 7 Soft keyboard interface3.1.3 記事本結(jié)構(gòu)設(shè)計(jì)文件列表建立新文件功能選擇功能選擇刪除文件打開文件讀取文件內(nèi)容軟鍵盤輸入文本功能選擇選擇保存修改后文件打開列表中文件讀取內(nèi)容讀取并顯示下一個(gè)文件內(nèi)容圖圖 8 記事本結(jié)構(gòu)圖記事本結(jié)
37、構(gòu)圖Fig. 8 Notepad structural diagram如圖 8 所示,文件列表界面是記事本的入口和出口。記事本通過調(diào)用文件列表功能菜單對(duì)文件執(zhí)行各種操作。在文件列表功能菜單中根據(jù)所選擇的菜單條目進(jìn)入相應(yīng)的功能界面,如新建文件編輯界面、文件顯示內(nèi)容界面或刪除文件提示框界面等。各個(gè)界面都有自己的功能菜單,通過調(diào)用自己的功能菜單對(duì)當(dāng)前界面進(jìn)行下一步的操作,如當(dāng)新建文件界面顯示時(shí),可通過菜單進(jìn)行打開文件操作和軟鍵盤輸入操作;當(dāng)打開文件時(shí)在文件內(nèi)容的顯示界面上,可通過菜單進(jìn)行顯示下一個(gè)文件內(nèi)容的操作和軟鍵盤編輯修改文件內(nèi)容的操作,并在文件內(nèi)容修改后,可通過修改文件提示框選擇是否保存修改后
38、的文件內(nèi)容。3.2 電子相冊(cè)架構(gòu)設(shè)計(jì) 3.2.1 電子相冊(cè)設(shè)計(jì)需求電子相冊(cè)支持 jpg、png、gif、xpm、和 bmp 格式圖片的瀏覽,并可以對(duì)圖片進(jìn)行放大、縮小或旋轉(zhuǎn)角度顯示。電子相冊(cè)還支持幻燈片模式瀏覽圖片,并可以對(duì)圖片進(jìn)行刪除等操作。(1) 顯示圖片列表功能:在圖片文件所在目錄讀取所有擴(kuò)展名為jpg、xpm、png、bmp、gif 格式的圖片文件,并將讀取的文件按順序用相同大小的縮略圖的形式顯示在圖片列表界面上。如果圖片數(shù)量超過當(dāng)前屏幕顯示范圍時(shí),可向下滾動(dòng)顯示。其它格式文件忽略不讀。(2) 圖片選中顯示功能:在圖片列表中選定某個(gè)圖片時(shí),此圖片的縮略圖成凸起放大狀態(tài),表示選中此圖片并
39、將對(duì)此圖片進(jìn)行操作。(3) 刪除圖片功能:對(duì)當(dāng)前選中的圖片可執(zhí)行刪除操作,選擇刪除后會(huì)進(jìn)行刪除確認(rèn)提示,若選擇徹底刪除圖片則從物理設(shè)備上和圖片列表上將該圖片刪除。(4) 瀏覽圖片功能:對(duì)選中的圖片可以執(zhí)行瀏覽的功能,若圖片原本大小超過圖片瀏覽區(qū)域(即相框)的大小,則會(huì)自動(dòng)調(diào)整變成適應(yīng)圖片瀏覽區(qū)域的最大尺寸。若圖片原本大小沒有超過圖片瀏覽區(qū)域大小,則以原始尺寸在圖片瀏覽區(qū)域顯示??蓪?duì)打開的圖片進(jìn)行放大、縮小、向左旋轉(zhuǎn)、向右旋轉(zhuǎn)、全屏模式與返回原始尺寸等一系列的瀏覽模式操作。(5) 圖片放大功能:在當(dāng)前圖片尺寸大小的基礎(chǔ)上,圖片可逐級(jí)放大,以尺寸的0.5 倍遞增,最大可放大到打開圖片時(shí)顯示的初始尺
40、寸的 3 倍。(6) 圖片縮小功能:在當(dāng)前圖片尺寸大小的基礎(chǔ)上,圖片可逐級(jí)縮小。最小可縮小到打開圖片時(shí)顯示的初始尺寸的 0.5 倍。(7) 圖片旋轉(zhuǎn)功能:打開圖片后,可在圖片的任意狀態(tài)下對(duì)圖片進(jìn)行旋轉(zhuǎn)操作??稍诋?dāng)前狀態(tài)下,將圖片向左或向右旋轉(zhuǎn),每次旋轉(zhuǎn)角度差值為 90。圖片旋轉(zhuǎn)后會(huì)自動(dòng)適應(yīng)窗口大小,完整顯示圖片。(8) 圖片移動(dòng)功能:圖片執(zhí)行放大功能后,圖片可在瀏覽區(qū)域進(jìn)行移動(dòng)。(9) 圖片全屏顯示功能:可以將圖片執(zhí)行全屏顯示。為了支持點(diǎn)擊操作,全屏顯示時(shí)不覆蓋相關(guān)功能按鈕。(10) 幻燈片模式自動(dòng)瀏覽功能:可從當(dāng)前選定的圖片開始執(zhí)行自動(dòng)播放圖片功能,初始設(shè)定播放速度為 3 秒間隔,可以加速或
41、減速播放。(11) 給用戶提供友好的圖形交互界面,并合理安排界面元素布局,使其美觀并且方便用戶操作。3.2.2 電子相冊(cè)界面設(shè)計(jì)電子相冊(cè)列表界面設(shè)計(jì):電子相冊(cè)列表界面設(shè)計(jì):如圖 9 所示,電子相冊(cè)圖片列表界面大小設(shè)定為 320*240。界面的上方顯示當(dāng)前選中的圖片的名字。中間的顯示區(qū)域以 4*3(即 4 列 3 排)格式對(duì)圖片的縮略圖進(jìn)行排列,被選中的圖片被突出放大顯示。界面的最下方為兩個(gè)按鈕,左側(cè)的是功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Option”和“Exit”。圖圖 9 圖片列表界面圖片列表界面Fig. 9 Picture list interface電子相冊(cè)功能菜單設(shè)計(jì)電子
42、相冊(cè)功能菜單設(shè)計(jì):如圖 10 所示,功能菜單大小以菜單項(xiàng)的多少具體而定,但一定要小于圖片列表界面大小的尺寸。菜單上顯示可操作的功能選項(xiàng),并對(duì)選定的功能選項(xiàng)高亮顯示。界面的最下方為兩個(gè)按鈕,左側(cè)的是功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Select”和“Cancel”。圖圖 10 功能菜單功能菜單Fig. 10 Function menu相鄰兩個(gè)界面之間切換時(shí),若后出現(xiàn)的界面大小小于先出現(xiàn)的界面大小,則第一個(gè)界面顯示蒙版即表示為禁用狀態(tài),如圖 10。電子相冊(cè)瀏覽界面設(shè)計(jì):電子相冊(cè)瀏覽界面設(shè)計(jì):電子相冊(cè)瀏覽界面上方顯示所顯示圖片的文件名,圖片瀏覽區(qū)顯示具體要求下的圖片狀態(tài),如正常顯示的圖
43、片(圖 11)、放大的圖片(圖 12)、縮小的圖片(圖 13)或旋轉(zhuǎn)的圖片(圖 14)等。界面的最下方為兩個(gè)按鈕,左側(cè)的是功能按鈕,右側(cè)的是返回按鈕,此界面上分別標(biāo)記為“Option”和“Back”。圖圖 11 正常顯示圖片瀏覽界面正常顯示圖片瀏覽界面Fig. 11 The normal size picture browsing interface圖圖 12 放大圖片瀏覽界面放大圖片瀏覽界面Fig. 12 Enlarged picture browsing interface圖圖 13 縮小圖片瀏覽界面縮小圖片瀏覽界面Fig. 13 Minified the image brower int
44、erface圖圖 14圖片旋轉(zhuǎn)角度瀏覽界面圖片旋轉(zhuǎn)角度瀏覽界面Fig. 14 Image rotation angle browsing interface3.2.3 電子相冊(cè)結(jié)構(gòu)設(shè)計(jì)如圖 15 所示,圖片列表界面為電子相冊(cè)的入口和出口。通過圖片列表功能菜單,可執(zhí)行打開圖片進(jìn)行瀏覽的功能和刪除圖片的功能,并根據(jù)所選擇的功能進(jìn)入圖片瀏覽界面或顯示刪除文件提示框。進(jìn)入圖片瀏覽界面可通過圖片瀏覽功能菜單,對(duì)當(dāng)前顯示的圖片執(zhí)行各種操作,從而進(jìn)入相應(yīng)的圖片瀏覽界面。放大圖片的顯示,縮小圖片的顯示,旋轉(zhuǎn)圖片的顯示,圖片全屏的顯示和自動(dòng)瀏覽圖片的顯示均將顯示在圖片瀏覽界面。而各種模式下的圖片瀏覽界面下,均可
45、以通過功能菜單對(duì)其他瀏覽模式進(jìn)行選擇。圖片列表刪除圖片功能選擇縮小顯示圖片打開圖片全屏顯示圖片自動(dòng)瀏覽圖片功能選擇放大顯示圖片圖片逆時(shí)針旋轉(zhuǎn)圖片順時(shí)針旋轉(zhuǎn)正常顯示圖片圖圖 15 電子相冊(cè)結(jié)構(gòu)圖電子相冊(cè)結(jié)構(gòu)圖Fig. 15 Album structural diagram3 算法設(shè)計(jì)和實(shí)現(xiàn)4.1 記事本主要算法設(shè)計(jì)和實(shí)現(xiàn)4.1.1 記事本類結(jié)構(gòu)設(shè)計(jì)NpMytexteditNpMessageboxNpNotepadFormNpSaveFormNpOpennoteFormNpFunctionviewFormNpNewnoteFormNpOpenoptionFormNpNewoptionFormNpD
46、eleteNoteFormMyKeyboardMyKey圖圖 16 記事本類圖記事本類圖Fig. 16 Notepad class diagram類圖說明:NpNotepadForm 為記事本程序的主界面類,即顯示文件列表的類。NpFunctionviewForm 為功能菜單的基類,也是文件列表功能菜單的實(shí)現(xiàn)類。NpNewnoteForm 為新建文件的功能實(shí)現(xiàn)類。NpOpennoteForm 為打開文件的功能實(shí)現(xiàn)類。NpDeletenoteForm 為刪除文件的功能實(shí)現(xiàn)類。NpNewoptionForm 為新建文件功能菜單的實(shí)現(xiàn)類。NpOpenoptionForm 為打開文件功能菜單的實(shí)現(xiàn)類。
47、NpSaveForm 為文件名保存實(shí)現(xiàn)類。NpMessagebox 為內(nèi)容修改提示框的功能實(shí)現(xiàn)類。MyKey 是軟鍵盤上的按鈕的實(shí)現(xiàn)類,MyKeyboard 為軟鍵盤功能實(shí)現(xiàn)類。MyTextedit 是 Qt 類中 QTextEdit 類的子類,實(shí)現(xiàn)鍵盤響應(yīng)函數(shù)功能的權(quán)限升級(jí),即從 protected 升級(jí)為 public。NpNotepadForm 與 NpfunctionviewForm 成單項(xiàng)關(guān)聯(lián)關(guān)系。NpFunctionviewForm 分別與 NpNewnoteForm、NpOpennoteForm、NpDeletenoteForm 成單向關(guān)聯(lián)。 NpNewnoteForm 與 Np
48、NewoptionForm 單項(xiàng)關(guān)聯(lián)。NpOpennoteForm 與 NpOpenoptionForm 雙向關(guān)聯(lián)。NpOpenoptionForm 與 NpDeletenoteForm、MyKeyboard 分別為單向關(guān)聯(lián)。NpNewnoteForm 分別與 NpOpennoteForm 和 MyKeyboard 單向關(guān)聯(lián)。NpOpenoptionForm 和 NpNewoptionForm 繼承于類 NpFunctionviewForm。MyKeyboard 依賴于 MyKey,若 MyKey 類發(fā)生改變 MyKeyboard 也將發(fā)生改變。MyTextedit 與 NpNewnoteFo
49、rm 類和 NpOpennoteForm 為聚合(聚集)關(guān)系。NpSaveForm 與 NpNewnoteForm 為聚合(聚集)關(guān)系。NpMessagebox 與 NpOpennoteForm 是聚合(聚集)關(guān)系。4.1.2 記事本功能實(shí)現(xiàn)記事本界面用到的控件主要有 QLable、QToolButton、QTextEdit 和 QListBox 等。(1) 記事本文件列表的實(shí)現(xiàn):首先掃描文件夾下的所有文件,包括隱藏的所有文件名,過濾記事本文件,并將這些記事本文件名根據(jù)創(chuàng)建時(shí)間的先后進(jìn)行排序存儲(chǔ)到文件鏈表中,將文件鏈表中的所有文件顯示在文件列表界面。流程圖如圖 17。(2) 功能菜單的實(shí)現(xiàn):在
50、記事本設(shè)計(jì)中有 3 個(gè)功能菜單界面,其中打開和新建的功能菜單均繼承自記事本文件列表界面的功能菜單,這三個(gè)界面都含有一個(gè) QListBox控件,但是菜單項(xiàng)不同,并根據(jù)不同的菜單項(xiàng)實(shí)現(xiàn)不同的功能。流程圖如圖 18。(3) 新建文件的實(shí)現(xiàn):首先提示輸入文件名,并檢查文件名的合法性。如果文件名不符合要求,則設(shè)置文件名的輸入無效,并提示重新輸入。如果不輸入文件名則提供默認(rèn)的文件名,進(jìn)入文本編輯界面,然后按照界面的寬度對(duì)文本輸入進(jìn)行限定,到界面寬度最大值時(shí)自動(dòng)換行。并且使文本保存時(shí)輸入到物理設(shè)備上時(shí)支持 unicode 編碼。流程圖如圖 19。開始將所有記事本文件名存入鏈表結(jié)束檢查目錄下是否有記事本文件Y
51、esNo按照文件名鏈表中文件的順序顯示文件名列表在列表顯示界面上設(shè)定文件列表中默認(rèn)選擇項(xiàng)建立文件列表迭代器掃描文件目錄下所有文件包括隱藏文件對(duì)目錄下文件按建立時(shí)間進(jìn)行排序圖圖 17 顯示文件列表流程圖顯示文件列表流程圖Fig. 17 File list showing flow diagram開始結(jié)束Switch(選擇菜單項(xiàng))關(guān)閉父窗口蒙版顯示菜單項(xiàng)關(guān)閉父窗口蒙版新建打開關(guān)閉父窗口蒙版刪除關(guān)閉父窗口蒙版軟鍵盤關(guān)閉父窗口蒙版退出新建文件功能實(shí)現(xiàn)打開文件功能實(shí)現(xiàn)刪除文件功能實(shí)現(xiàn)軟鍵盤功能實(shí)現(xiàn)返回文件列表圖圖 18 功能菜單流程圖功能菜單流程圖Fig. 18 Function menu flow d
52、iagram 開始進(jìn)入文本編輯界面結(jié)束文件名是否合法YesNo設(shè)定文本自動(dòng)換行位置設(shè)定文本自動(dòng)換行方式提示輸入文件名提示文件名不合法文本內(nèi)容是否為空?No執(zhí)行菜單功能選擇保存文件還是顯示功能菜單?Yes顯示菜單保存文件接受文本編輯保存文件到當(dāng)前目錄下圖圖 19 新建文件流程圖新建文件流程圖Fig. 19 New file flow diagram(4) 打開文件功能的實(shí)現(xiàn):從文件列表選定打開的文件,然后將文件內(nèi)容讀到QTextStream 中再顯示在 QTextEdit 中,并且規(guī)定顯示格式。如果文件內(nèi)容被修改后,提示文件是否需要保存。如果通過菜單選擇打開下一個(gè)文件,則查找到當(dāng)前文件的下一個(gè)文
53、件,并將其文件內(nèi)容顯示于界面顯示區(qū)域上。流程圖如圖 20。(5) 軟鍵盤的實(shí)現(xiàn): 定義按鍵類 MyKey 繼承自 QPushButton,點(diǎn)擊的時(shí)候發(fā)射該按鍵的文字。在類 MyKeyboard 中組合使用 MyKey,并將 MyKey 發(fā)射的信號(hào)與接收軟鍵盤輸入的槽進(jìn)行連接。根據(jù)軟鍵盤上邊緣上的點(diǎn)擊的拖動(dòng),通過跟蹤移動(dòng)點(diǎn)的坐標(biāo)位置,使整個(gè)軟鍵盤進(jìn)行相應(yīng)距離的移動(dòng)。流程圖如圖 21。開始結(jié)束設(shè)定文本自動(dòng)換行位置設(shè)定文本自動(dòng)換行方式選定待打開的文件No執(zhí)行菜單功能選擇退出文件還是顯示功能菜單?顯示菜單退出文件接受文本編輯退出文件打開文件并顯示文件內(nèi)容文件內(nèi)容是否被修改?是否保存修改后的文件內(nèi)容?Y
54、es保存文件內(nèi)容YesNo圖圖 20 打開文件流程圖打開文件流程圖Fig. 20 Open file flow diagram開始結(jié)束載入軟鍵盤上各按鍵顯示字符軟鍵盤按鍵布局定義軟鍵盤按鍵MyKey隨點(diǎn)擊動(dòng)作移動(dòng)而移動(dòng)鍵盤在界面上的位置點(diǎn)擊的是按鍵還是鍵盤邊緣?鍵盤邊緣按鍵設(shè)置點(diǎn)擊事件過濾器Switch(按鍵字符)No按鍵上字符轉(zhuǎn)為為小寫字符設(shè)定Cap鍵切換狀態(tài)光標(biāo)位置處文本換行設(shè)定Shift鍵切換狀態(tài)刪除光標(biāo)左側(cè)字符按鍵上字符是大寫還是小寫?按鍵上字符轉(zhuǎn)為大寫字符按鍵上字符顯示為普通字符按鍵上字符顯示為上字符向文本編輯區(qū)輸入字符軟鍵盤界面退出數(shù)字ESC字母CapEnterBackSpaceS
55、hift按鍵上字符是否是上字符?大寫小寫Yes圖圖 21 軟鍵盤流程圖軟鍵盤流程圖Fig. 21 Soft keyboard flow diagram4.2 電子相冊(cè)主要算法設(shè)計(jì)和實(shí)現(xiàn)4.2.1 電子相冊(cè)類結(jié)構(gòu)設(shè)計(jì)AlbDelFormAlbPicChooseFormAlbMenuFormAlbPicViewFormAlbPicOptionForm圖圖 22 電子相冊(cè)類圖電子相冊(cè)類圖 Fig. 22 Album class diagram類圖說明:電子相冊(cè)程序定義了 5 個(gè)類,AlbPicChooseForm 為電子相冊(cè)圖片列表界面類,AlbMenuForm 為電子相冊(cè)圖片列表功能菜單類,Alb
56、PicViewForm 為圖片瀏覽類,AlbOptionForm 為圖片瀏覽界面的功能菜單類,AlbDelForm 為圖片刪除類。AlbPicChooseForm 和 AlbMenuForm 成單向關(guān)聯(lián)關(guān)系。AlbMenuForm 和 AlbDelForm、AlbPicViewForm 分別成單向關(guān)聯(lián)關(guān)系。AlbPicViewForm 和 AlbOptionForm 成雙向關(guān)聯(lián)關(guān)系。其中,對(duì)圖片的各種處理均在 AlbPicViewForm 類中實(shí)現(xiàn),如放大、縮小、逆時(shí)針旋轉(zhuǎn)、順時(shí)針旋轉(zhuǎn)、全屏顯示、圖片移動(dòng)顯示等。4.2.2 電子相冊(cè)功能實(shí)現(xiàn)(1) 用戶進(jìn)入電子相冊(cè)后,首先顯示圖片列表。圖片列表
57、由 12 個(gè) Label 組成,將從當(dāng)前目錄下掃描 jpg、xpm、png、gif、bmp 格式的圖片并將其名稱存入鏈表中,通過 load 函數(shù)加載圖片到一個(gè) QImage 類型的變量中,然后將此變量與 Label 關(guān)聯(lián)起來,以實(shí)現(xiàn)圖片在 Label 上的顯示。值得注意的一點(diǎn)是,此 Label 上加載的圖片均為真實(shí)圖片的縮略圖,而不是圖片本身。如果圖片的縮略圖已經(jīng)存在,則將縮略圖直接顯示在Label 上,如果縮略圖不存在,則生成圖片的縮略圖。如果該圖片文件為非法圖片格式文件,則在該 Label 上載入一個(gè)標(biāo)志著讀取圖片文件失敗的圖片??s略圖是圖片的真實(shí)縮影,在縮小時(shí)保持原圖片的比例。流程圖如圖
58、 23。(2) 圖片選中狀態(tài)功能實(shí)現(xiàn):首先設(shè)定圖片選中狀態(tài)的表示方式,即縮略圖圖片的尺寸放大,滿足縮略圖寬為 80 像素或高為 60 像素中任一條件,保持圖片的寬高比例與原圖片寬高比例相同,選中狀態(tài)下的圖片縮略圖在圖片列表界面上凸起顯示。如果圖片是標(biāo)志為格式不正確的圖片,則該圖片被選中或離開選中狀態(tài)時(shí)不做放大縮小動(dòng)作以示與正常圖片的區(qū)別。且根據(jù)不同的按鍵按下,進(jìn)行不同位置圖片的選中。主要實(shí)現(xiàn)流程圖如圖 24 所示。開始將所有圖片文件名存入鏈表結(jié)束是否有jpg、xpm、png、gif、bmp格式圖片YesNo建立文件列表迭代器it掃描文件目錄下所有文件包括隱藏文件設(shè)定圖片列表顯示界面格式(4*3
59、)for(i=0;i12;i+)圖片文件是否是it中最后一個(gè)文件循環(huán)結(jié)束顯示加載圖片的第i個(gè)Label設(shè)置第i個(gè)Label隱藏YesNo是否存在迭代器中圖片的縮略圖NoYes加載圖片縮略圖到第i個(gè)Label根據(jù)文件頭判定是否是正確的圖片格式No設(shè)定此圖片縮略圖為名為“錯(cuò)誤標(biāo)志圖片”的圖片根據(jù)原始圖片比例設(shè)定縮略圖大小生成圖片縮略圖Yes圖圖 23 圖片列表顯示流程圖圖片列表顯示流程圖Fig. 23 Picture list flow diagram開始結(jié)束switch(按鍵)設(shè)定選中圖片的狀態(tài)及默認(rèn)選中圖片圖片列表圖片整體向上滾動(dòng)一排,呈選中狀態(tài)的圖片改變當(dāng)前圖片是否是界面上最后一排?左方向鍵
60、下方向鍵圖片鏈表中當(dāng)前圖片位置-1上,是否有圖片存在?圖片鏈表中當(dāng)前圖片位置+4上,是否有圖片存在?YesYes呈選中狀態(tài)的圖片為下一排的同一列圖片NoNo當(dāng)前圖片的前一張圖片呈選中狀態(tài)右方向鍵圖片鏈表中當(dāng)前圖片位置+1上,是否有圖片存在?當(dāng)前圖片的后一張圖片呈選中狀態(tài)圖片列表圖片整體向下滾動(dòng)一排,呈選中狀態(tài)的圖片改變當(dāng)前圖片是否是界面上最上一排?下方向鍵圖片鏈表中當(dāng)前圖片位置-4上,是否有圖片存在?YesYes呈選中狀態(tài)的圖片為上一排的同一列圖片No圖圖 24 選擇圖片流程圖選擇圖片流程圖Fig. 24 Picture selecting flow diagram(3) 刪除圖片功能實(shí)現(xiàn):在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司搬運(yùn)合同范例
- 個(gè)體工程合同范例
- 低溫容器銷售合同范例
- 上海廢棄廠房租賃合同范例
- 07標(biāo)準(zhǔn)施工合同范例
- 供銷酒水合同范例
- 保潔門窗合同范例
- 兼職平面模特合同范例
- 涼菜開店加工合同范例
- 養(yǎng)殖用地流轉(zhuǎn)合同范例
- 《無人機(jī)操控技術(shù)》 課件 項(xiàng)目 2 無人機(jī)模擬操控技術(shù)
- 新疆維吾爾自治區(qū)示范性普通高中評(píng)估指標(biāo)體系
- 血透高磷個(gè)案護(hù)理
- 2024年新蘇教版六年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(精編版)
- 征地拆遷律師服務(wù)方案
- 朗格漢斯細(xì)胞組織細(xì)胞增生癥課件
- GB/T 43585-2023一次性衛(wèi)生棉條
- 小區(qū)老樓電梯加裝鋼結(jié)構(gòu)工程施工方案全套
- 食堂遇特殊天氣應(yīng)急預(yù)案
- 礦山機(jī)電專業(yè)課程標(biāo)準(zhǔn)范本
- 食品風(fēng)味化學(xué)(第二版) 課件 第8、9章 風(fēng)味物質(zhì)的提取與分析、食品中風(fēng)味的釋放和穩(wěn)定化
評(píng)論
0/150
提交評(píng)論