QTC圖形界面編程技術(shù)_第1頁
QTC圖形界面編程技術(shù)_第2頁
QTC圖形界面編程技術(shù)_第3頁
QTC圖形界面編程技術(shù)_第4頁
QTC圖形界面編程技術(shù)_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rè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ā)過程在只要嚴(yán)格尊守約定好的信號和槽就可以了,待各部分組件

6、完成后,建立后組件的 實例間的“信號/槽”關(guān)系好,這個項目就完成了。 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ū)域的對角的坐標(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 截圖完成信號 /截圖完成后,使這個窗口設(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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論