freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)畢業(yè)論文基于qt的嵌入式網(wǎng)絡(luò)瀏覽器設(shè)計(jì)(編輯修改稿)

2024-12-14 01:01 本頁面
 

【文章內(nèi)容簡介】 是一款強(qiáng)大的音樂播放器, Mplayer 是款強(qiáng)大的媒體播放器,可以作為 Qt 進(jìn)程來實(shí)現(xiàn)一些功能,例如作為網(wǎng)頁中嵌入的音頻視頻輸出程序調(diào)用。 mpg123 能播放大部分常用格式音樂 如 mp wav 等, Mplayer 可播放 flv、 mpeg mpeg avi等格式視頻,遺憾的是由于嵌入式系統(tǒng)限制不能播放 swf 和 rmvb。 Qt 的熟悉 由于大學(xué)期間未曾學(xué)過嵌入式系統(tǒng)編程用的語言,也未系統(tǒng)學(xué)過 C++,但是本人有 C 語言 [17]以及其他語言的基礎(chǔ),因此首先要摸清 Qt 程序的編寫原理。 一、創(chuàng)建控件 圖 11 Qtopia 的界面 吉林大學(xué)學(xué)士學(xué)位論文 6 圖 11 為 Qtopia 的運(yùn)行界面, 與 C++[23]、 VB 不同的是 Qt 創(chuàng)建完窗口就得重新編譯出能實(shí)現(xiàn)窗體的源碼,每次修改都要重新編譯比較復(fù)雜,因此我采用直 接在 vi 下書寫程序,在 Qt 模擬測試平臺(tái)上觀察結(jié)果。首先是放置測試用控件如主窗體、輸入文本框、標(biāo)簽、觸發(fā)按鈕等 [8]。 主窗體:主要作為其他控件的容器。 子窗體:顯示一個(gè)網(wǎng)頁的全部信息,隨網(wǎng)頁建立而建立。這樣存放便于使用后退、前進(jìn)等功能。 輸入文本框:主要作為測試,向主窗體發(fā)送一些自定義字符串,或者顯示一些信息。 標(biāo)簽:作為顯示測試,用途同上。 觸發(fā)按鈕:作為各個(gè)分功能的測試開關(guān),點(diǎn)擊后能實(shí)現(xiàn)在指定位置顯示字符、圖片等作用。 二、文本輸出測試 起初有使用 textbrowser 進(jìn)行直接 html 解析轉(zhuǎn)換顯示,但是 發(fā)現(xiàn) 的textbrowser 的能力有限,超鏈接等都顯示為空白,還有一個(gè)換行符在文本框的末尾無法消除,因此放棄該想法。轉(zhuǎn)想用 textbrowser 來顯示文本,想一些其他的方式顯示超鏈接。然而, textbrowser 對(duì)背景色支持極不方便,需要設(shè)置許多位置,而且還會(huì)影響到字體的顏色。更不支持背景圖片 [16]。 接著又發(fā)現(xiàn),textbrowser 的滾動(dòng)條有嚴(yán)重的缺陷。滾動(dòng)之后窗口的鼠標(biāo)移動(dòng)數(shù)值范圍是不變的。例如: 480x360 的主窗體在右滾動(dòng) 100 單位之后,鼠標(biāo)移動(dòng)范圍數(shù)值由 0480變?yōu)?100580,而 textbrowser 的滾動(dòng)條則是無論滾動(dòng)多少都是在 0480 范圍 [11]。這對(duì)超級(jí)鏈接位置的設(shè)置有重大阻礙,因此完全放棄用 text 控件。改在子窗體上用畫板進(jìn)行文本輸出。這樣會(huì)有一個(gè)缺點(diǎn),就是鼠標(biāo)拖拽選擇文本功能暫時(shí)喪失(應(yīng)該可以靠程序來補(bǔ)足,暫時(shí)不考慮這方面),然而卻獲得了背景色、圖片的支持、以及滾動(dòng)條的支持,對(duì)于當(dāng)前“光標(biāo)”位置的判定雖然比 text 控件要困難一些,不過僅僅只是算術(shù)上的困難,能夠克服。 三、超鏈接的設(shè)計(jì)實(shí)現(xiàn) 超鏈接作為 web 瀏覽器的一大特色是不能忽視的,因此必須實(shí)現(xiàn)它。在網(wǎng)絡(luò)上找了幾個(gè)資料 ,有人認(rèn)為可以用改為平板型的按鈕實(shí)現(xiàn)超鏈接,也有人用label 控件實(shí)現(xiàn)超鏈 [14],這些方法都不錯(cuò),但是按鈕按下時(shí)有 3D 效果,使用 label控件不利于背景的透明處理,因此,我決定寫一個(gè)繼承 QRect 控件的新類吉林大學(xué)學(xué)士學(xué)位論文 7 HyperLink,用于確定一個(gè)超鏈接范圍,類中添加超鏈文本、超鏈顏色設(shè)置以及一些必要的范圍設(shè)置與判定函數(shù)。當(dāng)超鏈文本在主窗口中創(chuàng)建的時(shí)候,同時(shí)創(chuàng)建一個(gè) HyperLink 類覆蓋文本區(qū)域并等待鼠標(biāo)事件,點(diǎn)擊后發(fā)送信號(hào)激活槽,槽中對(duì) link 的功能(跳轉(zhuǎn)、新開頁面)進(jìn)行判定實(shí)現(xiàn)。 超鏈接區(qū)域類 HyperLink 的存儲(chǔ)方式應(yīng)該是鏈表方式,對(duì)于每個(gè) HyperLink類要實(shí)現(xiàn)的功能應(yīng)該由 HyperLink 類自己進(jìn)行設(shè)置,由一個(gè) while 循環(huán)判斷是哪一個(gè) HyperLink 執(zhí)行,讀出功能屬性(跳轉(zhuǎn)、開窗口)再用 case 語句選擇功能。再者,文字和圖片的 HyperLink 類應(yīng)該用一個(gè)屬性區(qū)分開,便于實(shí)現(xiàn)超鏈文本點(diǎn)擊后變色的功能。 關(guān)于跳轉(zhuǎn)功能,需要再添加個(gè)類似于超鏈的一個(gè)“落點(diǎn)”( LandPlace 類,用于存儲(chǔ)一些關(guān)于落點(diǎn)的屬性,當(dāng)點(diǎn)擊超鏈接發(fā)送跳轉(zhuǎn)信號(hào)時(shí),查找落點(diǎn)的位置信息。 四、熟悉 Qt 的準(zhǔn)備工作 顯示一段文字:利用畫筆 的 drawText 功能,在當(dāng)前的光標(biāo)位置畫上文字。 顯示一張圖片,利用畫筆的 drawPixmap 功能,在當(dāng)前光標(biāo)位置畫圖片。 涂改,畫筆的 eraseRect 功能,清除一個(gè)區(qū)域的內(nèi)容。 刷新,如果只用畫筆往窗體上畫,那么一旦窗體被其他程序的窗體覆蓋之后,所有顯示內(nèi)容都會(huì)消失,所以必須重載 paintEvent,使之以一定的速度刷新。 創(chuàng)建一個(gè)窗口超鏈:先用畫筆顯示一段加下劃線改變顏色的文字(或圖片),再創(chuàng)建 HyperLink 類,設(shè)置其功能為“窗口超鏈”。 五、 自定義類: HyperLink( x,y,w,h,name,linktext,endl)超鏈接類,用重載函數(shù)定義為兩種超鏈接 —— 文字鏈接與圖片鏈接,用 bool ispicture 來進(jìn)行區(qū)分。同時(shí)為除錯(cuò),添加一個(gè) bool endlink 來聲明鏈表尾結(jié)點(diǎn)。除錯(cuò)分析見(六)中超鏈接激活內(nèi)相關(guān)內(nèi)容。 LandPlace( x,y,w,h,name,endp)超鏈接落點(diǎn)類,同樣為除錯(cuò)添加 bool endland 來聲明鏈表尾結(jié)點(diǎn),雖然理論上只需要定位兩個(gè)參量 x, y,但是因?yàn)槠滏溄永^承于 QRect,且 w、 h 屬性便于輸入光標(biāo)定位,因此保留。 在熟悉過主要需要的功能以后,下一章開始對(duì) 本瀏覽器的各模塊加以實(shí)現(xiàn)。 吉林大學(xué)學(xué)士學(xué)位論文 8 第二章 主要部分功能模塊的實(shí)現(xiàn) 本章內(nèi)容為實(shí)現(xiàn)各部分主體功能模塊,章節(jié)末尾附分模塊的簡單測試過程。 功能實(shí)現(xiàn)的基本方法和全局函數(shù)的說明 文字的輸出 采用圖文環(huán)繞的方式,圖片后輸出文字的方式在之后圖片解析中給出。此處給出一個(gè)有關(guān)的參數(shù) nexttextplace,用于記錄輸出文字的位置(上、中、下)行間距默認(rèn)為 5個(gè)像素,文字、圖片邊框的顏色默認(rèn)為黑色,鏈接顏色默認(rèn)為藍(lán)色,點(diǎn)擊后的鏈接顏色默認(rèn)為紫色。為某些居中、居右顯示字串的要求考慮,提供一個(gè) bool 變量 placeset,以及參數(shù) nexttext,用于記錄當(dāng)前輸入文字的位置(左、中、右)。默認(rèn)字體為 times,大小為 12,背景圖片為空,最大字符高度maxweight 為當(dāng)前行字符中最高的一個(gè)。 菜單與菜單功能的實(shí)現(xiàn) 由于主窗體的滾動(dòng)條不能改變長度的限制,因此采用可隱現(xiàn)菜單的方式,制作一個(gè)菜單條,上有后退、前進(jìn)、刷新、轉(zhuǎn)到 4 個(gè)按鍵,以及 1 個(gè) URL 輸入框、 1 個(gè)電影欄存放該頁面內(nèi)視頻的清單。 圖 21 隱現(xiàn)菜單的效果 后退、前進(jìn)、刷新、轉(zhuǎn)到四個(gè)按鍵和文本錄入框的實(shí)現(xiàn)與功能實(shí)現(xiàn):每個(gè)打開的窗口擁有雙向鏈表結(jié) 構(gòu),指向前一個(gè)窗口和后一個(gè)窗口。為了實(shí)現(xiàn)這些功能在窗口類 mywidget 中添加了兩個(gè)變量 URL 和 tpm,一個(gè)用于記錄當(dāng)前的頁面,另一個(gè)用于記錄當(dāng)前頁面的 URL,同時(shí)利用窗口類自帶的 caption 屬性來記錄主窗體當(dāng)前的標(biāo)題。在點(diǎn)擊這四個(gè)按鈕時(shí),可以做出相應(yīng)的變化。 “轉(zhuǎn)到”實(shí)際上就是新建窗口。新建窗口時(shí),先按鏈表的順序找到能前進(jìn)的最終結(jié)點(diǎn),然后順序把這些結(jié)點(diǎn)釋放,再創(chuàng)建新的結(jié)點(diǎn),關(guān)閉前進(jìn)按鈕。激吉林大學(xué)學(xué)士學(xué)位論文 9 活后退按鈕。在圖 21 里用英文表示為 open。 “后退”功能只需要把主窗體的指針指向其后一個(gè)窗體即可,首先保存頁面信 息,再把頁面隱藏,改變指針后顯示窗體即可。在圖 21 里用英文表示為backward。 “前進(jìn)”功能與后退類似。在圖 21 里用英文表示為 forward。 “刷新”功能就是重新解析一遍本頁面的 Html 腳本。在圖 21 里用英文表示為 reload。 這幾個(gè)按鈕和文本框集中在一個(gè)菜單窗口上,無法固定在窗體中,因?yàn)闀?huì)影響滾動(dòng)與觀看頁面。因此將其做成可隱藏小窗體,用左上角一個(gè)小按鈕來控制隱現(xiàn)。小按鈕的位置只占據(jù)在頁邊距空間上,因此對(duì)瀏覽網(wǎng)頁基本不造成任何影響。 主要功能的實(shí)現(xiàn)程序在后面的函數(shù)中解釋。 視頻菜單 的實(shí)現(xiàn) 由于使用的是外部程序 mplayer,其不支持把視頻嵌入到 Qt 窗口中,因此只能折中考慮,將當(dāng)前窗口內(nèi)能播放的視頻文件放入一個(gè)下拉菜單中,用鼠標(biāo)選取播放。再者,由于移植的版本較低,沒有完善的交互功能,能做到的只有播放、停止。通過讀取輸入輸出信息能得到文件的長度等信息。 如圖 22 圖 22 視頻菜單 兩個(gè)功能基本描述如下;在視頻開始播放以后,畫面停止刷新,并等待鼠標(biāo)點(diǎn)擊響應(yīng),點(diǎn)擊后可以暫停視頻,重新開始刷新畫面,出現(xiàn)視頻菜單。 點(diǎn)擊暫停視頻的響應(yīng)槽: showbar()顯示視頻菜單,開始刷新。 繼續(xù)播放 mediastart():隱藏視頻菜單,停止刷新畫面繼續(xù)播放視頻。 吉林大學(xué)學(xué)士學(xué)位論文 10 停止播放 mediastop():隱藏視頻菜單,開始刷新畫面,顯示主菜單。 這三個(gè)函數(shù)比較簡單,不在下一節(jié)解釋。 初寫各部分功能模塊 emitword( int x,int y,QString emittext) : 輸出文字信息的模塊 輸出文本的函數(shù)是必不可少的,參數(shù)中, x、 y 輸入光標(biāo)位置, emittext 就是輸入的字符串,方便其他組件調(diào)用。由于看見各類瀏覽器在添加超長的字串或超鏈時(shí)是自動(dòng)拉長窗口大小,但是在本瀏覽器設(shè)計(jì)初期窗 口大小因?yàn)楸尘靶枰禺嫷葐栴},后來打算不使用這種方式。改為使用自動(dòng)換行功能。該處的難點(diǎn)在于如何判斷在何處需要換行。這個(gè)難點(diǎn)的困難之處在于,每個(gè)字母占用的“寬度”是不一樣的 [21]。雖然有 QFontInfo 類來統(tǒng)計(jì)一串字符的寬度,但畢竟不能靠寬度 /每個(gè)字符的寬度來獲得該段字符的字?jǐn)?shù)。因此,設(shè)計(jì)時(shí)考慮使用逐次折半法,即先將要輸出的整個(gè)字符串與當(dāng)前行余下的空白處寬度對(duì)比,如果小,則直接輸出,如果大,則把字串折半,再進(jìn)行對(duì)比,如果小,則把剩下的那部分折半,無法再折半的時(shí)候,輸出,把剩下的字符串刷寫到原來字符串中,再 開始用折半法輸出。如此周而復(fù)始就可以正確的輸出所有的文字。 createlink( int x,int y,QString linktext,QString landtext,bool islink):超鏈接的創(chuàng)建 主要屬性為方形的位置,鏈接顯示內(nèi)容、鏈接跳轉(zhuǎn)文字,是否是鏈接(還是跳轉(zhuǎn)),寬高可以靠 fm對(duì) linktext 取寬高值以及本行最大字符高度值來確定,而是否是尾結(jié)點(diǎn)則通過 createlink 中的相關(guān)程序條件判定來確認(rèn)。 createland( int x,int y,QString landtext,QString text):跳轉(zhuǎn)點(diǎn)的創(chuàng)建 這個(gè)功能是用來創(chuàng)建一個(gè)新的跳轉(zhuǎn)落點(diǎn)。 x、 y 就是當(dāng)前輸入光標(biāo)位置,以x、 y 為左上角坐標(biāo), landtext 的長度為寬度, landtext 的最高可能高度為高度定義一個(gè)區(qū)域作為跳轉(zhuǎn)落點(diǎn)。以 x 和區(qū)域的頭部 top()為坐標(biāo)輸出 landtext,即跳轉(zhuǎn)到的標(biāo)記 text 的所在處。 emitlink( int x,int y):超級(jí)鏈接的激活 這個(gè)是功能模塊中非常重要的一個(gè)模塊,兩個(gè)參數(shù)是當(dāng)前鼠標(biāo)的位置,采用鏈表方式形成一個(gè)單向鏈表來進(jìn)行點(diǎn)擊位置的查找。 從鏈表頭循環(huán)直到最后一個(gè)節(jié)點(diǎn)。在測試過程中發(fā)現(xiàn)一個(gè)問題,如果以每個(gè)節(jié)點(diǎn)的 next 不為 0 來判斷吉林大學(xué)學(xué)士學(xué)位論文 11 并往下查找,條件為 while( tempnext!=0)最后一節(jié)點(diǎn)則會(huì)指向一個(gè)空鏈表進(jìn)而發(fā)生應(yīng)用程序出錯(cuò)的問題。因此我改造了數(shù)據(jù)結(jié)構(gòu),加上一個(gè)末尾節(jié)點(diǎn),以空區(qū)域( 0, 0, 0, 0)為鏈接區(qū)域防止干擾其他正常的超級(jí)鏈接,定義 bool endlink屬性,并修改查找條件為 while( tempendlink==false),測試成功,不會(huì)再出現(xiàn)應(yīng)用程序出錯(cuò),點(diǎn)擊其他鏈接也能正常激活超級(jí)連接。添加了一般瀏覽器所擁有的對(duì)當(dāng) 前點(diǎn)擊鏈接加框的功能。由于加框和去框的過程中底部背景可能會(huì)受損,因此 hyperlink 類中添加一個(gè)小塊背景圖片的 QPixmap 作為補(bǔ)償使用。首先擦除該 hyperlink 類所在范圍內(nèi)的畫板內(nèi)容,用小塊背景圖片填充后,再補(bǔ)上相應(yīng)字符。在本設(shè)計(jì)的基礎(chǔ)上,如果想重畫整個(gè)畫面是不現(xiàn)實(shí)的,因?yàn)榇蛴〉钠胀ㄎ淖植⑽闯蔀閱为?dú)的類,難以在重畫之后恢復(fù)。關(guān)于后面 html 文本解析處也會(huì)遇到類似問題。 在窗體中打印文字時(shí),我們以 y 軸為頂部為準(zhǔn)輸出文字和圖片,因此超鏈的窗口也必須適應(yīng)這點(diǎn),以 x、 y 為坐標(biāo),鏈接字體的寬度和高度作為超鏈范 圍的寬、高來創(chuàng)建。寬度可以用 (linktext)來確定,高度可用 () 來確定,其實(shí)對(duì)于超鏈而言,用 ()即可確定高度,而不用管某些字符如J、 L 和 g、 y 這類會(huì)“出界”的特殊字符。 附:出界的問題,出在每個(gè)字符所占用的高度和寬度一樣各有區(qū)別,例如,大寫的 J 就比小寫的 a 要占據(jù)更多的上部空間,而小寫的 y 也比小寫的 a 要多占據(jù)下方的控件。 ()表示了多占用的上部空間和中間統(tǒng)一高度之和,而 ()表示多占用的下部空間的高度。如果不考慮這些問 題,則可能在顯示的過程中會(huì)有字符重疊現(xiàn)象,或者是在擦除的過程中有留下痕跡的現(xiàn)象。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1