【正文】
賴于 MyKey,若 MyKey 類發(fā)生改變 MyKeyboard 也將發(fā)生改變。MyTextedit 與 NpNewnoteForm 類和 NpOpennoteForm 為聚合(聚集)關系。NpSaveForm 與 NpNewnoteForm 為聚合(聚集)關系。NpMessagebox 與 NpOpennoteForm 是聚合(聚集)關系。 記事本功能實現(xiàn)記事本界面用到的控件主要有 QLable、QToolButton、QTextEdit 和QListBox 等。(1) 記事本文件列表的實現(xiàn):首先掃描文件夾下的所有文件,包括隱藏的所有文件名,過濾記事本文件,并將這些記事本文件名根據(jù)創(chuàng)建時間的先后進行排序存儲到文件鏈表中,將文件鏈表中的所有文件顯示在文件列表界面。流程圖如圖 17。(2) 功能菜單的實現(xiàn):在記事本設計中有 3 個功能菜單界面,其中打開和新建的功能菜單均繼承自記事本文件列表界面的功能菜單,這三個界面都含有一個 QListBox 控件,但是菜單項不同,并根據(jù)不同的菜單項實現(xiàn)不同的功能。流程圖如圖 18。(3) 新建文件的實現(xiàn):首先提示輸入文件名,并檢查文件名的合法性。如果文件名不符合要求,則設置文件名的輸入無效,并提示重新輸入。如果不輸入文件名則提供默認的文件名,進入文本編輯界面,然后按照界面的寬度對文本輸入進行限定,到界面寬度最大值時自動換行。并且使文本保存時輸入到物理設備上時支持 unicode 編碼。流程圖如圖 19。華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)25開始將所有記事本文件名存入鏈表結束檢查目錄下是否有記事本文件Y e sN o按照文件名鏈表中文件的順序顯示文件名列表在列表顯示界面上設定文件列表中默認選擇項建立文件列表迭代器掃描文件目錄下所有文件包括隱藏文件對目錄下文件按建立時間進行排序圖 17 顯示文件列表流程圖Fig. 17 File list showing flow diagram開始結束S w i t c h ( 選擇菜單項 )關閉父窗口蒙版顯示菜單項關閉父窗口蒙版新建打開關閉父窗口蒙版刪除關閉父窗口蒙版軟鍵盤關閉父窗口蒙版退出新建文件功能實現(xiàn) 打開文件功能實現(xiàn) 刪除文件功能實現(xiàn) 軟鍵盤功能實現(xiàn) 返回文件列表圖 18 功能菜單流程圖Fig. 18 Function menu flow diagram 華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)26開始進入文本編輯界面結束文件名是否合法Y e sN o設定文本自動換行位置設定文本自動換行方式提示輸入文件名提示文件名不合法文本內容是否為空 ?N o執(zhí)行菜單功能選擇保存文件還是顯示功能菜單 ?Y e s顯示菜單保存文件接受文本編輯保存文件到當前目錄下圖 19 新建文件流程圖Fig. 19 New file flow diagram(4) 打開文件功能的實現(xiàn):從文件列表選定打開的文件,然后將文件內容讀到 QTextStream 中再顯示在 QTextEdit 中,并且規(guī)定顯示格式。如果文件內容被修改后,提示文件是否需要保存。如果通過菜單選擇打開下一個文件,則查找到當前文件的下一個文件,并將其文件內容顯示于界面顯示區(qū)域上。流程圖如圖 20。(5) 軟鍵盤的實現(xiàn): 定義按鍵類 MyKey 繼承自 QPushButton,點擊的時候發(fā)射該按鍵的文字。在類 MyKeyboard 中組合使用 MyKey,并將 MyKey 發(fā)射的信號與接收軟鍵盤輸入的槽進行連接。根據(jù)軟鍵盤上邊緣上的點擊的拖動,通過跟蹤移動點的坐標位置,使整個軟鍵盤進行相應距離的移動。流程圖如圖21。華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)27華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)28開始結束設定文本自動換行位置設定文本自動換行方式選定待打開的文件N o執(zhí)行菜單功能選擇退出文件還是顯示功能菜單 ?顯示菜單退出文件接受文本編輯退出文件打開文件并顯示文件內容文件內容是否被修改 ?是否保存修改后的文件內容 ?Y e s保存文件內容Y e sN o圖 20 打開文件流程圖Fig. 20 Open file flow diagram開始結束載入軟鍵盤上各按鍵顯示字符軟鍵盤按鍵布局定義軟鍵盤按鍵 M y K e y隨點擊動作移動而移動鍵盤在界面上的位置點擊的是按鍵還是鍵盤邊緣 ?鍵盤邊緣按鍵設置點擊事件過濾器S w i t c h ( 按鍵字符 )N o按鍵上字符轉為為小寫字符設定 C a p 鍵切換狀態(tài) 光標位置處文本換行 設定 S h i f t 鍵切換狀態(tài) 刪除光標左側字符按鍵上字符是大寫還是小寫 ?按鍵上字符轉為大寫字符按鍵上字符顯示為普通字符按鍵上字符顯示為上字符向文本編輯區(qū)輸入字符 軟鍵盤界面退出數(shù)字E S C字母C a pE n t e r B a c k S p a c eS h i f t按鍵上字符是否是上字符 ?大寫小寫Y e s華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)29圖 21 軟鍵盤流程圖Fig. 21 Soft keyboard flow diagram華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)30 電子相冊主要算法設計和實現(xiàn) 電子相冊類結構設計A l b D e l F o r mA l b P i c C h o o s e F o r mA l b M e n u F o r mA l b P i c V i e w F o r mA l b P i c O p t i o n F o r m圖 22 電子相冊類圖 Fig. 22 Album class diagram類圖說明:電子相冊程序定義了 5 個類,AlbPicChooseForm 為電子相冊圖片列表界面類,AlbMenuForm 為電子相冊圖片列表功能菜單類,AlbPicViewForm 為圖片瀏覽類,AlbOptionForm 為圖片瀏覽界面的功能菜單類,AlbDelForm 為圖片刪除類。AlbPicChooseForm 和 AlbMenuForm 成單向關聯(lián)關系。AlbMenuForm 和 AlbDelForm、AlbPicViewForm 分別成單向關聯(lián)關系。AlbPicViewForm 和 AlbOptionForm 成雙向關聯(lián)關系。其中,對圖片的各種處理均在 AlbPicViewForm 類中實現(xiàn),如放大、縮小、逆時針旋轉、順時針旋轉、全屏顯示、圖片移動顯示等。 電子相冊功能實現(xiàn)(1) 用戶進入電子相冊后,首先顯示圖片列表。圖片列表由 12 個 Label組成,將從當前目錄下掃描 jpg、xpm、png、gif、 bmp 格式的圖片并將其名稱存入鏈表中,通過 load 函數(shù)加載圖片到一個 QImage 類型的變量中,然后將此變量與 Label 關聯(lián)起來,以實現(xiàn)圖片在 Label 上的顯示。值得注意的一點是,此Label 上加載的圖片均為真實圖片的縮略圖,而不是圖片本身。如果圖片的縮略圖已經(jīng)存在,則將縮略圖直接顯示在 Label 上,如果縮略圖不存在,則生成圖片的縮略圖。如果該圖片文件為非法圖片格式文件,則在該 Label 上載入一個標志著讀取圖片文件失敗的圖片??s略圖是圖片的真實縮影,在縮小時保持原圖片的比例。流程圖如圖 23。(2) 圖片選中狀態(tài)功能實現(xiàn):首先設定圖片選中狀態(tài)的表示方式,即縮略華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)31圖圖片的尺寸放大,滿足縮略圖寬為 80 像素或高為 60 像素中任一條件,保持圖片的寬高比例與原圖片寬高比例相同,選中狀態(tài)下的圖片縮略圖在圖片列表界面上凸起顯示。如果圖片是標志為格式不正確的圖片,則該圖片被選中或離開選中狀態(tài)時不做放大縮小動作以示與正常圖片的區(qū)別。且根據(jù)不同的按鍵按下,進行不同位置圖片的選中。主要實現(xiàn)流程圖如圖 24 所示。華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)32開始將所有圖片文件名存入鏈表結束是否有j p g 、 x p m 、 p n g 、 g i f 、 b m p格式圖片Y e sN o建立文件列表迭代器 i t掃描文件目錄下所有文件包括隱藏文件設定圖片列表顯示界面格式 ( 4 * 3 )f o r ( i = 0 。 i 1 2 。 i + + )圖片文件是否是i t 中最后一個文件循環(huán)結束顯示加載圖片的第 i 個 L a b e l設置第 i 個 L a b e l 隱藏Y e sN o是否存在迭代器中圖片的縮略圖N oY e s加載圖片縮略圖到第 i 個 L a b e l根據(jù)文件頭判定是否是正確的圖片格式N o設定此圖片縮略圖為名為 “ 錯誤標志圖片 ” 的圖片根據(jù)原始圖片比例設定縮略圖大小生成圖片縮略圖Y e s圖 23 圖片列表顯示流程圖Fig. 23 Picture list flow diagram華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)33開始結束s w i t c h ( 按鍵 )設定選中圖片的狀態(tài)及默認選中圖片圖片列表圖片整體向上滾動一排 , 呈選中狀態(tài)的圖片改變當前圖片是否是界面上最后一排 ?左方向鍵下方向鍵圖片鏈表中當前圖片位置 1 上 , 是否有圖片存在 ?圖片鏈表中當前圖片位置 + 4 上 , 是否有圖片存在 ?Y e sY e s呈選中狀態(tài)的圖片為下一排的同一列圖片N oN o當前圖片的前一張圖片呈選中狀態(tài)右方向鍵圖片鏈表中當前圖片位置 + 1 上 , 是否有圖片存在 ?當前圖片的后一張圖片呈選中狀態(tài)圖片列表圖片整體向下滾動一排 , 呈選中狀態(tài)的圖片改變當前圖片是否是界面上最上一排 ?下方向鍵圖片鏈表中當前圖片位置 4 上 , 是否有圖片存在 ?Y e sY e s呈選中狀態(tài)的圖片為上一排的同一列圖片N o圖 24 選擇圖片流程圖Fig. 24 Picture selecting flow diagram(3) 刪除圖片功能實現(xiàn):在圖片列表界面上對選中圖片要進行刪除操作時,需注意兩點,一點就是待刪除的圖片是否是圖片列表的最后一張圖片,若是的話,則刪除圖片后,被刪除圖片的前一張圖片呈選中狀態(tài)。否則,刪除圖片后,被刪除圖片的后一張顯示為選中狀態(tài),且此圖片刪除后,圖片文件鏈表中刪除圖片節(jié)點,其列表界面中圖片的位置要統(tǒng)一向前移動一個位置。流程圖如圖25。華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)34開始刪除目錄下圖片 ,并刪除鏈表中圖片名結束圖片是否是圖片鏈表中的最后一張圖片N o設定選中當前圖片鏈表中的最后一張圖片選擇待刪除圖片Y e s設定選中當前圖片鏈表中的后一張圖片刪除目錄下圖片 ,并刪除鏈表中圖片名調整圖片列表界面圖片顯示圖 25 刪除圖片功能實現(xiàn)流程圖Fig. 25 implmentation of deleting function diagram(4) 圖片的放大功能的實現(xiàn):設定 md_ChangeSize 來記錄放大的倍數(shù),并且當放大到最大倍數(shù)時,將菜單項上的“放大” 改成相應的提示菜單條 “已經(jīng)達到最大,并且根據(jù)放大倍數(shù)在瀏覽區(qū)域的相框上繪制圖片。功能實現(xiàn)流程圖如圖 26。開始結束m d _ C h a n g e S i z e 等于 3N oY e sm d _ C h a n g e S i z e 等于 0 . 5改變菜單條目狀態(tài)調用 S c a l e ( ) 函數(shù)得出新的 p i x m a p調用 r e p a i n t ( ) 函數(shù)畫出新的 p i x m a pY e sN o圖 26 圖片的放大功能實現(xiàn)流程圖Fig. 26 Implementation of enlarging function diagram(5) 圖片縮小功能的實現(xiàn):可在圖片的任意大小狀態(tài)下進行縮小,直到圖片縮小到初始打開圖片顯示尺寸的 倍大小??s小圖片時要保證縮小后的圖華中農(nóng)業(yè)大學本科畢業(yè)論文(或設計)35片依然居于相框開始改變 m d _ C h a n g e S i z e 的值結束m d _ C h a n g e S i z e 等于 0 . 5N oY e sm d _ C h a n g e S i z e 等于 0 . 5改變菜單條目狀態(tài)邊界調整 , 修正 m i _ M o v e X 與m i _ M o v e Y 的值調用 S c a l e ( ) 函數(shù)得出新的 p i x m a p調用 r e p a i n t ( ) 函數(shù)畫出新的 p i x m a pY e sN o圖 27 圖片縮小功能實現(xiàn)Fig. 27 Implementation of minifing function diagram中間位置。在圖片非全屏模式和全屏模式兩種情況下,判定當前狀態(tài)的圖片與初始時顯示的位置移動的距離大小,并根據(jù)不同的圖片旋轉角度,據(jù)此距離大小計算并設定相應的圖片在相框中的位置坐標。實現(xiàn)流程圖如圖 27。(6) 圖