版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 通識(shí)教育課程論文 課程名稱:_C+圖形界面編程技術(shù) 學(xué) 院 專業(yè)班級(jí) 學(xué) 號(hào) 姓 名 愛爾蘭(KEN 任課教師 LZ 論 QT 的信號(hào) / 槽機(jī)制 WindowCut 一個(gè)簡(jiǎn)單實(shí)用的截圖軟件 在圖形界面編程技術(shù),我比較喜歡 QT 這個(gè)框架,喜歡它的一次編寫,到處 編譯這種方式,既高效,移植性又強(qiáng),我試過在 window 下用 Qt creator 開 發(fā)一個(gè)軟件,然后直接將工程放到 linux ubunto下,再次用 Qt creator 打開之前的工程,很簡(jiǎn)單地直接編譯一次,一個(gè)代碼也不用改,就將該軟件移 植到 Linux 下了,這一點(diǎn)很不錯(cuò)。 更重要的是, Qt 為我們帶來(lái)了全新的思想:
2、將一個(gè)工程邏輯分解為多個(gè)組 件,利用強(qiáng)大的信號(hào) /槽機(jī)制, 竟然可使這個(gè)工程分解為相互獨(dú)立 , 互不干擾的若 干個(gè)部分。 以下,我將通過介紹我的 WindowCut 截圖軟件的編寫過程來(lái)分析這 種思想。 界面: 截圖過程: 截圖后的效果: 思想: 這個(gè)軟件由1 :主窗口 mainWindow , 2 :全屏截圖器FullEdit FEdit (就是半透明的全屏的組件)和3 :截圖查看器PicSee PSee組成,這3部 分都是互相獨(dú)立的類,在類的定義中,類與類之間無(wú)直接的函數(shù)調(diào)用,這些組 件定義了若干個(gè)signal/slot,而這3個(gè)類的實(shí)例是通過signal/slot 機(jī)制 偶合在一起的。
3、mainWindow上的Cut按鍵被按下后,mainWindow 就隱藏,并發(fā)出一個(gè) StartCut() 的信號(hào),表示“開始截圖”。然后 FEdit接收到StartCut() 信號(hào)后,它就初始化,并記錄下此時(shí)刻的屏幕背景,最后全屏顯示半透明的背景。 然PSee接收這個(gè)信號(hào)后,它就隱藏起來(lái)。 當(dāng)用戶在全屏截圖器FEdit的全屏半透明背景上選定好區(qū)域后,F(xiàn)ullEdit 就會(huì)隱藏窗口并發(fā)出FinishCut“截圖完成”的信號(hào)(信號(hào)中包含了截圖的地 址),然后截圖查看器PSee接收到FinishCut 信號(hào)及其中的截圖的地址后,就 會(huì)顯示窗口,并在窗口上面繪制截圖顯示給用戶,而mainWindow
4、收到 FinishCut信號(hào)后,就會(huì)顯示主窗口,并使save按鈕可見。 此后,用戶點(diǎn)擊save按鈕并成功保存后,mainWindow就會(huì)發(fā)出PicSaved “圖片保存信號(hào)”,然后PSe噲收到此信號(hào),然后隱藏。 大概的流程就是這樣。 軟件的功能是簡(jiǎn)單的,但是,里面的思想?yún)s很有意義的。 對(duì)于mainWindow,它只管發(fā)射信號(hào),壓根兒不用知道有多少個(gè)對(duì)象收到 這些信號(hào)(當(dāng)然也不可能知道),并且當(dāng)收到特定的信號(hào)時(shí),就去執(zhí)行信號(hào)處 理器slot就可以了,F(xiàn)ullEdit 和PicSee也一樣。因?yàn)榫唧w哪個(gè)信號(hào)與哪 個(gè)槽有連接關(guān)系,不是在類的定義在確定的,而且信號(hào)/槽的連接是面向類的實(shí) 例的(所以不可
5、能由類的抽象或定義來(lái)確定),QObject:connect (sender, SIGNAL,receiver,SLOT)這個(gè)函數(shù)要傳遞對(duì)象的實(shí)例作參數(shù),所以無(wú)法對(duì)抽 象(未實(shí)例化)的對(duì)象之間建立連接關(guān)系。這些信號(hào)/槽的連接是在類外定義的 (上述3個(gè)對(duì)象的連接關(guān)系是在中面向這3個(gè)類的具體實(shí)例來(lái)定義的,與類的定 義無(wú)關(guān)系)。 信號(hào)/槽 互相獨(dú)立的組件 +可靠的信號(hào)/槽機(jī)制 =功能完善的軟件 在一個(gè)項(xiàng)目中,假如我是PM那么只要我們確定好項(xiàng)目中各組件的“信號(hào) / 槽”連接關(guān)系后,我們就可以將這個(gè)項(xiàng)目分解為若干個(gè)相互獨(dú)立,無(wú)不干擾的 的部分,開發(fā)過程在只要嚴(yán)格尊守約定好的信號(hào)和槽就可以了,待各部分組件
6、完成后,建立后組件的 實(shí)例間的“信號(hào)/槽”關(guān)系好,這個(gè)項(xiàng)目就完成了。 00 嗯,這思想,這開發(fā)模式,不正是全世界開發(fā)者所追求的目標(biāo)嗎? SRC: #i ncludevQtGui/QApplicatio n #i nclude #i nclude #i nclude int main( int argc, char *argv) QApplicati on a(argc, argv); Widget mai nWin dow; Ill三二 J 毎 Wi dget h orlorta 1L ay o ut J 1 CHRoxLayout CutB uttcn 刮 QPu shButton Sav-
7、Button 2d QPu shButton MP); PNG File(*PNG); JPEG File(*.JPG) if () olmage(); (); y1 =eve nt -pos().y(); isLeftDown =true ;(); y2 =eve nt -pos().y(); update。;(); y2= eve nt -pos().y(); if (x1 x2) swap(x1,x2); if (y1 y2) swap(y1,y2);/ 為 right-bottom坐標(biāo) ); /記錄截圖區(qū)域的對(duì)角的坐標(biāo) 使(x1,y1) 為left-top 坐標(biāo),(x2,y2) /記錄
8、截圖區(qū)域 Qlmage *_fin al_scree n =new Qlmage( this -_Cut(_screen,x1,y1,x2,y2); this -hide(); emit Fi nishCut(_fi nal_scree n); Fini shCut 截圖完成信號(hào) /截圖完成后,使這個(gè)窗口設(shè)為hide /當(dāng)用戶釋放左鍵時(shí),發(fā)出 全屏截圖器的重繪,就是先繪制半透明背景, 然后從原背景中cut 一個(gè)當(dāng)前選中的區(qū)域,并繪在半透明背景的上方 再繪出藍(lán)色邊框包圍起截圖的區(qū)域,用于提示 */ void FullEdit:pai ntEve nt(QPai ntEve nt *) / 繪制半
9、透明背景 (0,0,_shadow); if (isLeftDown) / 從原背景中 cut 一個(gè)當(dāng)前選中的區(qū)域 , 并繪在半透明背景的上方 QImage tmp =this -_Cut(_screen,x1,y1,x2,y2); int lx = (x1=x2)? x1:x2; int ly = (y1=y2)? y1:y2; (lx,ly,tmp); / / 用藍(lán)色邊框包圍起截圖的區(qū)域 QPen myPen; (1); (Qt:blue); (myPen); (x1,y1,x1,y2); (x1,y1,x2,y1); (x1,y2,x2,y2); (x2,y1,x2,y2); / / #
10、ifndef #define #include PICSEE_H PICSEE_H Q_OBJECT public : explicitPicSee(QWidget *parent = 0); public slots: void Minimized_Hide(); / 收到 StartCut 信號(hào)后 , 先最小化 , 然后再 隱 藏 / 收到 FinishCut,PSee接收?qǐng)D片指針 , 并顯示窗口 (showNormal) void Get_Pix_Show(QImage *final_pix); protected : void paintEvent(QPaintEvent *); pr
11、ivate : QImage *_pix; ; #endif / PICSEE_H / #include #include PicSee:PicSee(QWidget *parent): QWidget(parent) this -setWindowTitle( WindowCut RC ); void PicSee:paintEvent(QPaintEvent *) QPainter painter(this ); (0,0,*_pix); void PicSee:Minimized_Hide() / 收到 StartCut 信號(hào)后 , 先最小化 , 然后 再 隱藏 this -showMinimized(); this
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版暨南大學(xué)離婚心理學(xué)研究與應(yīng)用合同3篇
- 二零二五年度電梯門套綠色環(huán)保材料采購(gòu)合同3篇
- 二零二五年度集團(tuán)高層管理人員聘任與職務(wù)調(diào)整合同6篇
- 二零二五年股票代持與反洗錢義務(wù)合同3篇
- 二零二五年駕駛員勞務(wù)派遣與車輛充電樁油耗管理服務(wù)合同3篇
- 二零二五版戶外拓展訓(xùn)練特色課程開發(fā)與推廣合同3篇
- 二零二五年度玻璃器皿生產(chǎn)設(shè)備租賃合同3篇
- 2025年度國(guó)際教育培訓(xùn)機(jī)構(gòu)合作合同6篇
- 展會(huì)展位搭建服務(wù)合同(2篇)
- 2025年度餐飲設(shè)施設(shè)備租賃合同書3篇
- 醫(yī)院手術(shù)室醫(yī)院感染管理質(zhì)量督查評(píng)分表
- 心內(nèi)電生理導(dǎo)管及器械
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國(guó)育齡女性生殖健康研究報(bào)告
- 各種靜脈置管固定方法
- 消防報(bào)審驗(yàn)收程序及表格
- 教育金規(guī)劃ppt課件
- 呼吸機(jī)波形分析及臨床應(yīng)用
- 常用緊固件選用指南
評(píng)論
0/150
提交評(píng)論