




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 通識教育課程論文 課程名稱:_C+圖形界面編程技術(shù) 學(xué) 院 專業(yè)班級 學(xué) 號 姓 名 愛爾蘭(KEN 任課教師 LZ 論 QT 的信號 / 槽機制 WindowCut 一個簡單實用的截圖軟件 在圖形界面編程技術(shù),我比較喜歡 QT 這個框架,喜歡它的一次編寫,到處 編譯這種方式,既高效,移植性又強,我試過在 window 下用 Qt creator 開 發(fā)一個軟件,然后直接將工程放到 linux ubunto下,再次用 Qt creator 打開之前的工程,很簡單地直接編譯一次,一個代碼也不用改,就將該軟件移 植到 Linux 下了,這一點很不錯。 更重要的是, Qt 為我們帶來了全新的思想:
2、將一個工程邏輯分解為多個組 件,利用強大的信號 /槽機制, 竟然可使這個工程分解為相互獨立 , 互不干擾的若 干個部分。 以下,我將通過介紹我的 WindowCut 截圖軟件的編寫過程來分析這 種思想。 界面: 截圖過程: 截圖后的效果: 思想: 這個軟件由1 :主窗口 mainWindow , 2 :全屏截圖器FullEdit FEdit (就是半透明的全屏的組件)和3 :截圖查看器PicSee PSee組成,這3部 分都是互相獨立的類,在類的定義中,類與類之間無直接的函數(shù)調(diào)用,這些組 件定義了若干個signal/slot,而這3個類的實例是通過signal/slot 機制 偶合在一起的。
3、mainWindow上的Cut按鍵被按下后,mainWindow 就隱藏,并發(fā)出一個 StartCut() 的信號,表示“開始截圖”。然后 FEdit接收到StartCut() 信號后,它就初始化,并記錄下此時刻的屏幕背景,最后全屏顯示半透明的背景。 然PSee接收這個信號后,它就隱藏起來。 當(dāng)用戶在全屏截圖器FEdit的全屏半透明背景上選定好區(qū)域后,F(xiàn)ullEdit 就會隱藏窗口并發(fā)出FinishCut“截圖完成”的信號(信號中包含了截圖的地 址),然后截圖查看器PSee接收到FinishCut 信號及其中的截圖的地址后,就 會顯示窗口,并在窗口上面繪制截圖顯示給用戶,而mainWindow
4、收到 FinishCut信號后,就會顯示主窗口,并使save按鈕可見。 此后,用戶點擊save按鈕并成功保存后,mainWindow就會發(fā)出PicSaved “圖片保存信號”,然后PSe噲收到此信號,然后隱藏。 大概的流程就是這樣。 軟件的功能是簡單的,但是,里面的思想?yún)s很有意義的。 對于mainWindow,它只管發(fā)射信號,壓根兒不用知道有多少個對象收到 這些信號(當(dāng)然也不可能知道),并且當(dāng)收到特定的信號時,就去執(zhí)行信號處 理器slot就可以了,F(xiàn)ullEdit 和PicSee也一樣。因為具體哪個信號與哪 個槽有連接關(guān)系,不是在類的定義在確定的,而且信號/槽的連接是面向類的實 例的(所以不可
5、能由類的抽象或定義來確定),QObject:connect (sender, SIGNAL,receiver,SLOT)這個函數(shù)要傳遞對象的實例作參數(shù),所以無法對抽 象(未實例化)的對象之間建立連接關(guān)系。這些信號/槽的連接是在類外定義的 (上述3個對象的連接關(guān)系是在中面向這3個類的具體實例來定義的,與類的定 義無關(guān)系)。 信號/槽 互相獨立的組件 +可靠的信號/槽機制 =功能完善的軟件 在一個項目中,假如我是PM那么只要我們確定好項目中各組件的“信號 / 槽”連接關(guān)系后,我們就可以將這個項目分解為若干個相互獨立,無不干擾的 的部分,開發(fā)過程在只要嚴格尊守約定好的信號和槽就可以了,待各部分組件
6、完成后,建立后組件的 實例間的“信號/槽”關(guān)系好,這個項目就完成了。 00 嗯,這思想,這開發(fā)模式,不正是全世界開發(fā)者所追求的目標嗎? 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坐標 ); /記錄截圖區(qū)域的對角的坐標 使(x1,y1) 為left-top 坐標,(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 截圖完成信號 /截圖完成后,使這個窗口設(shè)為hide /當(dāng)用戶釋放左鍵時,發(fā)出 全屏截圖器的重繪,就是先繪制半透明背景, 然后從原背景中cut 一個當(dāng)前選中的區(qū)域,并繪在半透明背景的上方 再繪出藍色邊框包圍起截圖的區(qū)域,用于提示 */ void FullEdit:pai ntEve nt(QPai ntEve nt *) / 繪制半
9、透明背景 (0,0,_shadow); if (isLeftDown) / 從原背景中 cut 一個當(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); / / 用藍色邊框包圍起截圖的區(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 信號后 , 先最小化 , 然后再 隱 藏 / 收到 FinishCut,PSee接收圖片指針 , 并顯示窗口 (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 信號后 , 先最小化 , 然后 再 隱藏 this -showMinimized(); this
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 示范學(xué)校德育工作匯報
- 補光干預(yù)對紅豆杉生長周期的影響機制研究
- 外出授課試講管理辦法
- 辦公修舊利廢管理辦法
- 500KV輸電線路鐵塔斜柱斜面施工詳解
- 崗山窯文化遺產(chǎn)活化促進地方農(nóng)業(yè)產(chǎn)業(yè)發(fā)展模式探索
- 民警十二分制管理辦法
- 樓宇智能化PLC控制系統(tǒng)的設(shè)計與實現(xiàn)
- 生物多樣性保護與恢復(fù)機制-洞察及研究
- 地方國資集團投資能力提升路徑研究
- 電氣控制與PLC應(yīng)用技術(shù)(三菱機型)高教版YL-235A送料機構(gòu)控制電路的連接與編程教學(xué)案例高教版
- GB/T 5163-2006燒結(jié)金屬材料(不包括硬質(zhì)合金)可滲性燒結(jié)金屬材料密度、含油率和開孔率的測定
- GB/T 17989.2-2020控制圖第2部分:常規(guī)控制圖
- 建設(shè)項目安全設(shè)施‘三同時’課件
- 2022語文課程標準:“語言文字積累與梳理”任務(wù)群解讀及實操
- DB15T 489-2019 石油化學(xué)工業(yè)建設(shè)工程技術(shù)資料管理規(guī)范
- 內(nèi)蒙古自治區(qū)通遼市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 螺旋溜槽安裝標準工藝
- 2022年人教版六年級下冊語文期末考試卷
- 《土地開發(fā)整理項目預(yù)算編制暫行辦法》
- 安徽省評議公告的中小學(xué)教輔材料零售價格表
評論
0/150
提交評論