07通信qt設計胡二稿_第1頁
07通信qt設計胡二稿_第2頁
07通信qt設計胡二稿_第3頁
07通信qt設計胡二稿_第4頁
07通信qt設計胡二稿_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目錄摘要IIIAbstractIV第一章前言1Linux 操作系統的產生及發(fā)展1Linux 操作系統的特點21.2.1開放. 3真正的多任務多用戶3UNIX 的完整實現31.2.4 完全符合IX 標準3良好的用戶界面4強大的網絡功能4良好的可移植性4設備獨立性5第二章 QT 相關技術背景6Qt 概述6QT 發(fā)展歷史7QT 優(yōu)點7KDE 和 GNOME8QT 的安裝10QT 信號與槽機制11元對象系統(Meta-Object System)16第三章 系統設計與實現18需求分析18系統功能設計19主要的類及抽象數據類型的定義20系統實現21算法設計21程序設計流程23第四章系統測試264.14.

2、2測試定義26測試概述264.34.4測試的原則26測試的內容28驗證(verification)28確認(validation)28. 284.5第五章總結30參 考 文 獻31致謝32誠信承諾書33基于 QT 的圖形用戶界面設計摘要Linux 操作系統是現在流行的一種免費的操作系統,它完全符合IX 標準,擁有強大的網絡功能和良好的可移植性,系統的開發(fā)就是基于這個。為了用戶操作的方便,系統用 QT 來實現系統的用戶界面,它 是一個跨的 C+ 圖形用戶界面庫,由挪威 TrollTech 公司。本文主要在 QT 框架設計了一個server 端和cnt 端的界面。主要是修改槽和按鍵,主要實現sen

3、d、connection、Close connection、Quit 這四個按鍵的功能。接下來實現客戶端和服務端各自的算法模塊,客戶端實現的是判斷輸入的數是否符合基本要求,輸入的數必須是 0 到 9 之間的任何一個整數;而服務端實現的是將輸入的數字與事先隨機產生的數相比較,若相等,則在客戶端輸出回答正確,若不等,則提示錯誤,并輸出正確。最后是socket 通信,在server 端和cnt 端各建立多個類模塊來實現socket 通信。關鍵字:Linux;QT;socket 通信Based on the QT graphical usererface designAbstractLinux ope

4、rating system is now a popular free operating system, which fully comply withIX standards, has a strong network function and good portability, system development is based on this platform. For user convenience, the system uses QT to achieve the systems usererface, it is a cross-platform C + + graphi

5、cal usererface library, the company producedby the Norwegian TrollTech. QT framework in this pr designed a server-side andcnt-sideerface. Was modified groove and keys, the main achievemend, connection,Close connection, Quit the function of these four buttons. Then the cnt and server toachieve their

6、algorithm module, the cnt input to achieve is to determine whether thenumber of basic requirements, enter the number betn 0 and 9 must be anyeger; theserver implemen ion is the input the number of randomly generated numbers with the prior comparison, if equal, the output of the c nt to answer correc

7、tly, if so, then an error, and output the correct answer. Finally, socket communication, the server side and c nt side ofthe class module to create multiple socket communication.Keywords: Linux, QT, socket communication第一章前言1.1 Linux 操作系統的產生及發(fā)展在 Linux 的發(fā)展歷程中,Unix 和 Minix 扮演著十分重要的角色。1990 年,芬蘭人Linus T

8、orvalads 在間,所以 Linus大學接觸到 Unix,但是當時上機學習要排隊等候很長的時了自己的PC 機,希望安裝一個類似的操作系統。由于 Unix 的內核代碼不容易得到,所以他安裝了 Minix。Minix 是一個基于微內核技術的類似于 Unix 的操作系統,是 Andrew Tanebaum 教授利用業(yè)余時間開發(fā)的用于教學的操作系統。當時, Minix 并不是完全免費的,而且 Andrew Tanebaum 教授不允許別人為Minix 再加入其他東西,目的是為了教學的簡明扼要。在使用過程中,Linus 受Minix 的啟發(fā),決定開發(fā)一個自己的操作系統。1991 年,Linus 需要

9、一個簡單的終端仿真程序來存取一個組的內容,于是自己編寫了一個程序來實現此目的。用 Linus 自己的話說:“在這之后,開發(fā)工作可謂一帆風順,盡管程序代碼仍然千頭萬緒,但此時我已有一些設備,調試也相對較以前容易了。在這一階段我開始使用 C 語言編寫代碼,這使得開發(fā)工作加快了許多。與此同時,我產生了一個大膽的夢想:制作一個比Minix 更好的Minix?!被鹃_發(fā)工作持續(xù)兩個月,直到有了一個磁盤驅動和一個小的文件系統。1991 年 8月,Linus 對外發(fā)布了一套新的操作系統,源代碼放在芬蘭最大的 FTP名為Linux 的目錄中,Linux 也因此而得名。上,并放在與 Minix 不同,Linux

10、 不是一種公益,不是共享,它是一種,免費的!這里的“”體現在的方面,允許使用者隨意更改系統,為系統加入任何功能。也正是這種,使得它不斷地發(fā)揚光大。1991 年 10 月 5 日,Linus 宣布了Linux 系統的第一個正式的版本,其版本號為 0.02。此版本的Linux 能夠運行gun 的bourne again s但是應用程序還不多。bash s以及gun 的編譯器gcc,Linus 是一個完全的理想主義者,他希望 Linux 是一個完全免費的操作系統。1993年,Linux 的第一個“產品”版 1.0 問世時,是按完全所有的源碼必須公開,而且任何人均不得從 Linu擴散進行擴散的。它要求

11、易中獲利。同時,Linux 給了用戶充分的,它從一開始就連同源代碼一起提供給服務用戶,允許用戶進行任何更改,增加任何功能。Linus 采用了一個比 GPL 還要嚴格的由的。但是,半年之后,他漸漸地發(fā)現這種純粹證以確保Linux 內核是自方式實際上限制了Linux的的。于是,Linus 轉身了 GNU 的 GPL。也正是由于采用了 GPL,Linux版。(蓉,2005)今天才有如此多的要使 Linux 成為一個理想的操作系統,是一項十分巨大的工程。Linus 認識到單靠一個人的力量是的,它需要來自世界各地的編程共同努力。因此任何人想往內核中加入新的特性,只要被認為是有用的,合理的。Linus 就

12、允許加入。就這樣,Linux在來自世界各地的眾的共同協作下發(fā)展了起來。下面是Linux 發(fā)展過程中的重要里程碑。1990 年,Linus Torvalad 首次接觸Minix;1991 年,Linus Torvalad 開始在Minix 上編寫各種驅動程序等操作系統內核組件;1991 年,Linus Torvalad 公開了Linux 內核;1993 年,Linux 1.0 版,Linux 轉向 GPL協議;1994 年,Linux 的第一個商業(yè)版式Slackware 問世;1996 年,IX 標準;技術局的計算機系統確認 Linux 版本 1.2.13 符合1997 年,Linux 的簡體中

13、文版相繼問世;2001 年,Linux 2.4 版內核發(fā)布;2003 年,Linux 2.6 版內核發(fā)布;1.2 Linux 操作系統的特點Linux 作為一種流行的操作系統,在市場上占有越來越大的份額,很多人特別是程序員紛紛轉向Linux,Linux 逐漸成為的一個強勁對手。Linux 是類 Unix 的實現,具有強大的功能,很好地支持了各種現代編程技術,具有以下主要特點。1.2.1開放Linux 是一款免費的操作系統,用戶可以通過網絡或其他途徑免費獲得,并可以任意修改其源代碼,這是其他的操作系統所做不到的。正是由于這一點,來自全世界的無數程序員參與了Linux 的修改,編寫工作,程序員可以

14、根據自己的和靈感對其進行改變。這讓Linux 吸收了無數程序員的精華,不斷壯大。它開放源碼并對外免費提供,在ernet 上。者可以按照自己的需要修改,和發(fā)布程序的源碼,并(S.Balakrishnam,2003)1.2.2 真正的多任務多用戶Linux 充分利用了x86 CPU 的任務切換機制,實現了真正多任務,多用戶環(huán)境,允許多個用戶同時執(zhí)行不同的程序,并且可以給緊急任務以較高的優(yōu)先級。多任務是現代主要的一個特點,它指計算機同時執(zhí)行多個程序,而且各個程序的運行互相獨立。Linux系統調度每一個進程地使用CPU。由于CPU 的處理速度非??欤鱾€被啟動執(zhí)行的程序看起來好像在并行運行。事實上,從

15、 CPU 執(zhí)行一個程序中的一組指令到 Linux調度CPU 兩次運行這個程序之間有很短的時間延遲,但用戶是感覺不到的。1.2.3 UNIX 的完整實現從發(fā)展的背景看,Linux 與其他操作系統有著明顯的區(qū)別。Linux 是從一個比較成操作系統 Unix 發(fā)展而來的,Unix 上絕大多數命令都可以在Linux 里找到并有所加強??梢哉J為它是 Unix 系統的一個變種,因而 Unix 的優(yōu)良特點(如可靠性,穩(wěn)定性,強大的網絡功能,強大的數據庫支持能力以及良好的開放性等)都在 Linux 上一一體現出來。同時在 Linux 的發(fā)展過程中。Linux 的用戶能夠直接使用與 Unix 相關的支持和幫助。

16、1.2.4 完全符合IX 標準IX 是基于 Unix 的第一個操作系統簇國際標準。Linux 遵循這一標準,使得 Unix下許多應用程序可以很容易地移植到Linux 下,相反也是如此。Linux 完全兼容IX 1.0 標準,可以在 Linux 下通過相應的模擬器運行常見的DOS,Windows 程序。這為用戶從Windows 轉到Linux 奠定了基礎。1.2.5 良好的用戶界面Linux 向用戶提供了兩種界面:用戶界面和系統調用。Linux 的傳統用戶界面是基于命令行的界面。即 Unix 系統的S存入文件后提交系統批量自動執(zhí)行。S界面,它既可以聯機實時逐條輸入執(zhí)行,也可以有很強的設計能力,用

17、戶可以方便地用它編制程序,從而為用戶擴充系統功能提供更高級段。可編程 S是指將多條命令組合在一起,形成一個 S程序。這個程序可以單獨運行,也可以與其他程序同時運行。Linux 的系統調用界面是供用戶編程時使用的,用戶可以在編程時直接使用系統提供的系統調用命令。另外,Linux 通過使用鼠、菜單、窗口和滾動條還為用戶提供了一個直觀,易操作及交互性強大的圖形化界面。1.2.6 強大的網絡功能互聯網是在 Unix 的基礎上繁榮起來的,Linux 的網絡功能當然不會遜色。Linux 的網絡功能和其內核緊密相連,在這方面Linux 要優(yōu)于其他操作系統。在Linux 中,用戶可以輕松實現網頁瀏覽,文件傳輸

18、,登錄等網絡工作。Linux 強大的網絡功能首先體現在對ernet 的使用的支持。Linux 免費提供了大量支持ernet 的。用戶能夠用 Linux 與世界上其他人進行通信。Linux 強大的網絡功能還體現在文件傳輸能力上。用戶能通過一些 Linux 命令完成信息或文件的傳輸。也是 Linux 系統提供的重要網絡功能,Linux 不僅允許通過網絡進行廣播電臺程序的傳輸,還為系統管理員和技術提供了通過網絡其他系統的窗口。借助這各的能力,無論系統在地理上位于休息技術都能夠有效地為多個系統服務。(謝,2008)Linux 不僅能夠作為網絡工作站使用還可以作為服務器提供 WWW、FTP、等服務。1.

19、2.7 良好的可移植性可移植性是指將操作系統從一種計算機硬件轉移到另一種計算機硬件后,仍然能夠按其自身方式運行的能力。Linux 是一種可移植的操作系統,能夠在從微型到大型的任何環(huán)境和任何上運行??梢浦残詾檫\行 Linux 系統的計算機與其他計,而不需要另外增加特殊的通口。Linux 可算機進行準確而有效的通信提供了以運行在多種硬件上。如具有x86、680 x0、SPARC、ALPHA 等處理器的。同時Linux 還支持多處理器技術、多個處理器同時工作,從而使系統性能大大的提高。此外,Linux 還是一種操作系統,可以運行在掌上電腦、機頂盒或機上。2001年 1 月發(fā)布的 Linux 2.4

20、版內核已經能夠完全支持er64 位架構。1.2.8 設備獨立性設備獨立性是指操作系統把所有外部設備當作文件,只要安裝了它們的驅動程序,任何用戶都可以像使用文件一樣,使用這些設備,而不必知道它們的具體形式設備獨立性的關鍵在于內核的適應能力。其他操作系統只允許一定數量或一定種類的外部設備連接。而具有設備獨立性的操作系統能夠容納任意種類及任意數量的設備,因為每一個設備老師通過與內核的連接獨立進行。Linux 量具有設備獨立性的操作系統,它的內核具有高度適應能力。隨著的程序員加入Linux 編程,會胡硬件設備加入到各種Linux 內核和版本中。別處,由于用戶可以到Linux 的內核源代碼,因此用戶可以

21、修改內核源代碼,以便適應新增加的外部設備。第二章 QT 相關技術背景2.1 Qt 概述Qt 是Trolltech 公司的一個產品。Qt 是一個多的C+圖形用戶界面應用程序框架。它提供給應用程序開發(fā)者建立圖形用戶界面應用程序所需的所有功能。Qt 是完全面象的,它很容易擴展,并且允許真正的組件編程。自從 1996 年早些時候,Qt 進入商業(yè)領域,它已經成為全世界范圍內數千種成功的應用程序的基礎。Qt 也是流行的Linux 桌面環(huán)境KDE 的基礎。(KDE 是所有主要的Linux版的一個標準組件)Qt 支持下述:MS/Windows - 95、98、NT 4.0、ME、和 2000Unix/X11

22、- Linux、Sun和其它很多 X11、paq Tru64 UNIX、IBM AIX、SGI IRIXMacosh - Mac OS XEmbedded - 有幀緩沖(frame buffer)支持的Linux。Qt 提供了一組范圍相當廣泛的C+類庫,并包含了幾種命令行和圖形界面的工具,有效地使用這些工具可以加速開發(fā)過程。主要組成部分如下所示。Qt Designer:Qt 設計器。用來可視化地設計應用程序界面。Qt Linguist:Qt 語言學家。用來翻譯應用程序。以此提供對多種語言的支持。Qmake:使用此工具可以由簡單的、與Makefile。無關的工程文件來生成編譯所需的Qt Assi

23、stant:關于 Qt 的幫助文件。類似于MSDN??梢钥焖俚匕l(fā)現你所需要的幫助。moc:元對象編譯器。uic:用戶界面編譯器。在程序編譯時被自動調用,通過 ui_*.h 文件生成應用程序界面。qembed:轉換數據,比如,將Linux 下 Qt 開發(fā)環(huán)境搭建轉換為C+代碼。2.2 QT 發(fā)展歷史Qt 是一個跨的 C+ 圖形用戶界面庫,由挪威 TrollTech 公司,目前包括 Qt, 基于 Framebuffer 的 Qt Embedded,快速開發(fā)工具 Qt Designer,工具 QtLinguist 等部分 Qt支持所有 Unix,2008)系統,當然也包括 Linux,還支持 Win

24、NT/Win2k,Win95/98Trolltech。(公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序員 就已經開始設計 Qt 了,Qt 的第一個商業(yè)版本于 1995 年推出然后 Qt 的發(fā)展就很快了,下面是 Qt 發(fā)展史上的一些里程碑:1996 Oct KDE 組織成立1998 Apr 05 Trolltech 的程序員在 5天之內將Netsc5.0從Motif移植到Qt上1998 Apr 08 KDE Free Qt1998 Jul 09 Qt 1.40 發(fā)布1998 Jul 12 KDE 1.0 發(fā)布1999 Mar 04 QPL 1.0 發(fā)布1

25、999 Mar 12 Qt 1.44 發(fā)布1999 Jun 25 Qt 2.0 發(fā)布1999 Sep 13 KDE 1.1.2 發(fā)布成立2000 Mar 20Qt 發(fā)布2000 Sep 06 Qt 2.2 發(fā)布2000 Oct 05 Qt 2.2.1 發(fā)布2000 Oct 30 Qt/Embedded 開始使用 GPL2000 Sep 04 Qt free edition開始使用 GPL2.3 QT 優(yōu)點基本上,Qt 同 X Window臺上的 MFC、OWL、VCL、上的 Motif、Openwin、GTK等圖形界面庫和 Windows是同類型的東西,但是 Qt 具有下列優(yōu)點。優(yōu)良的跨特性Q

26、t 支持下列操作系統:Windows 95/98、Windows NT、Linux、SolarinOS、HP-UX、DigitaIX (OSF/1, Tru64)、 Irix,FreeBSD、BSD/OS、SCO、AIX、 OS390、QNX 等等。面象Qt 的良好封裝機制使得 Qt 的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常 方便的。 Qt 提供了一種稱為 signals/slots 的安全類型來替callback,這使得各個元件之間的協同工作變得十分簡單。豐富的 APIQt 包括多達 250 個以上的 C+ 類,還替供基于模板的 collectionsserializatio

27、n、 file、I/O device、 directory management、 date/time 類。甚至還包括正則表達式的處理功能。(1)(2)(3)支持 2D/3D 圖形渲染,支持 OpenGL。大量的開檔。XML 支持。2.4 KDE 和 GNOME但是真正使得 Qt 在界的眾多 Widgets(如 Lesstif、Gtk、EZWGL、Xforms、fltk 等等)中脫穎而出的還是基于 Qt 的重量級Trolltech 公司承受巨大壓力的一個原因。下面- KDE/QT .VS. Gnome/Gtk 是怎么發(fā)生的。KDE。 有趣的是,KDE 也是使得來看看這場著名的在 Unix 的圖

28、形界面一向是以 MIT 的 X Window 系統為標準,在商業(yè)應用上有兩大流派,一派是以 Sun 公司的 Openlook 陣營,一派是 IBM/HP的OSF (Open Software Foundation) 的 Motif, 雙方經過多年競爭之后, Motif 最終勝出,成為最普遍使用的界面庫,后來雙方又妥協出一個 CDE(Common Desktop Enviroment)作為一個標準的圖形界面。但是 Motif/CDER 的價格非常昂貴,在這同時微軟的 Windows 圖形界面發(fā)展速度非??欤?Unix 界的后起之秀 Linux 也急需一個可靠并且免費的圖形界面1。1996 年

29、10 月,由開發(fā)圖形排版工具 Lyx 的德國人 Matthias Ettrich 發(fā)起了 KDE 計劃。 KDE用 GPL的全稱為 K Desktop Environment,可以看出是針對 CDE。KDE 本身 是采的,但是 KDE 卻是使用 Qt 來作為其底層庫,因為當時 Qt 已經將其Unix 版本發(fā)布了,但是 Qt 并不遵循 GPL, 因此 KDE 被很多的作者,認為利用非開發(fā)違背了 GPL 的精神,于是 GNU 的狂熱信徒兵分兩路,一路是去制作 Harmonny,試圖重寫一套兼容于 Qt 的替代品,另一路是由一個 26歲的墨西哥程序員 Miguel De Icaza下重新開發(fā)一套叫

30、GNOME(GNU NetworkObject Enviroment)來替代由于 Linux 界的了幾個全職程序員來加入KDE。RedHat 不喜歡 KDE/Qt 的,因此RedHat 甚至專門派出Motif VS Openlook 相GNOME 進行開發(fā)工作,于是一場同似的就這么打起來了。Trolltech 為了 KDE 曾數次修改 Qt,從成立 KDE的Free Qt到采用 QPL,可謂是費盡心機,但是 GNOME 采用的 GTK 一開始就是完全的 GPL,因此在這個方 面 GNOME 有一定的優(yōu)勢,加上 Qt/KDE 采用 C+ 開發(fā),入門的門檻比較高,而 GTK/Gnome 采用 C,

31、 因此 GNOME 吸引了的開發(fā)者,但是 KDE 畢竟先走了一步, 推出的 KDE1.1.2 十分穩(wěn)定, 而當時急忙中推出的 GNOME1.0 的系統穩(wěn)定性奇差,有人甚至笑稱 GNOME1.0 還沒有 KDE 1.0 Alpha 穩(wěn)定。但是 GNOME 后來發(fā)展比較快,大有迎頭趕上的勢頭。當時雙方的開發(fā)者在網絡 上炒得天翻地覆,連 Linux 之父 Linus 只是說了一句喜歡用 KDE 都倍受指責。到了第三個年頭,也就是 2000 年,可謂是風云突變,一個接一個的事件先后發(fā)生:首先是一批從 Apple 公司出來的工程師成立了一個叫 Eazel 的公司替GNOME GNOME為龐大的設計界面,

32、然后是一批 GNOME 程序員成立了一個 Helix Code 公司替提供商業(yè)支持,而大家期待以久的 KDE 2.0 也終于發(fā)布了,這恐怕是目前最了之一, 除了 KDE 本身,還包括 Koffice 套件,Kdevelop 等等大批,其主力Kounqueror 也是第一個可以同微軟的ernet Exploer 相抗衡的瀏覽器。 而 Sun一個 GNOME公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了,Sun 還宣布將把重量級辦公Star office 同 GNOME 集成,Trolltech 公司自然不能坐以待斃,于今年 10 月 4 日將 Qt 的 f

33、ree edition 變?yōu)?GPL 宣言,徹底解決了 KDE 的力的回擊。到現在為止,這場問題,又推出了Qt ,給了 GNOME 陣營一個有不能很快看到結果。一般說來,還在繼續(xù),相信目前 GNOME 吸引的公司比較多,但是 KDE/Qt的開發(fā)的效率和質量比 GNOME高,而且在 Office/環(huán)境中先走一步,在一定時間內還將處于優(yōu)勢地位。(W.RichardStevens,Stephen A.Rago,2003)2.5 QT 的安裝一般來說,居于 Qt/Embedded 開發(fā)的應用程序最終會發(fā)布到安裝有Linux 操作系統的小型設備上,所以使用裝有 Linux 操作系統的 PC 或工作站來完

34、成 Qt/Embedded 開發(fā)是最理想的環(huán)境,當然它也可以安裝在 UNIX 和 Windows 系統上。在一臺裝有Linux 操作系統的機器上建立 Qt/Embedded 開發(fā)環(huán)境,首先需要準備安裝包:tmake 工具安裝包、Qt/Embedded 安裝包和 Qt 的 X11 版的安裝包。這些可以免費從Trolltech 的 Web 或FTP 服務器上。其中各安裝包的主要作用是 tmake 1.11或更高版本生成 Qt/Embedded 應用工程的 Makefile 文件; Qt/Embedded 2.3.7 是Qt/Embedded 的安裝包;Qt 2.3.2 for X11 將產生x11

35、 開發(fā)環(huán)境所需要的兩個工具2。由于安裝包有許多不同版本,版本不同在使用時將造成。所以在使用時要注意一下安裝原則:選擇或了 Qt/Embedded 的某個版本的安裝包之后,下一步選擇安裝的Qt for X11 的安裝包的版本必須比最先的Qt/Embedded 的版本舊,這是因為Qt forX11 的安裝包的兩個工具 uic 和 designer 產生的源文件會和 Qt/Embedded 的庫一起被編譯,本著“向前兼容”的原則,Qt for X11 的版本應比 Qt/Embedded 的版本舊。1、安裝tmake在Linux 命令模式下運行以下命令:tar xft tmake-1.11.tar.g

36、zexport TMAKEDIR=$PWD/tmake-1.11export TMAKEPATH=$TMAKEDIR/lib/qws/linux-X86-g+ export PATH=$TMAKEDIR/bin:$PATH2、安裝 Qt/Embedded 2.3.7在Linux 命令模式下運行以下命令:tar xft qt-embedded-2.3.7.tar.gz cd qt-2.3.7export QTDIR=$PWD export QTEDIR=$QTDIRexport PATH=$QTDIR/bin:$LD_LIBRARY_PATH./configure qconfig qvfb de

37、pths 4,8,16,32 make sub-srccd .“./configure qconfig qvfb depths 4,8,16,32”指定 Qt工具qvfb,并支持 4,8,16,32 位的顯示顏色深度。“make sub-src”指定按精簡方式編譯開發(fā)包。Qt開發(fā)包生成虛擬緩沖幀開發(fā)包有 5 種編譯范圍的選項,使用這些選項可控制 Qt 生成的庫文件的大小,編譯選項的具體用法運行“./configure-help”查看。3、安裝 Qt/X11 2.3.2在Linux 命令行模式下運行以下命令:tar xfz qt-x11 -2.3.2.tar.gz cd qt-2.3.2expo

38、rt QTDIR=$PWDexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure no opengl makemake C tools/qvfb mv tools/qvfb/qvfb bin cp bin/uic $QTDIR/bin cd .根據開發(fā)環(huán)境可在configure 的參數中添加別的參數,可鍵入“./configure -help”來查看。2.6 QT 信號與槽機制信號和槽機制是 QT 的機制,要精通 QT 編程就必須對信號和槽有所了解。信號和槽是一種高級接口

39、,應用于對象之間的通信,它是 QT 的特性,也是 QT 區(qū)別于其它工具包的重要地方。信號和槽是 QT 自行定義的一種通信機制,它獨立于標準的C/C+語言,因此要正確的處理信號和槽,必須借助一個稱為 moc(Meta Object Compiler)的 QT 工具,該工具是一個 C+預處理程序,它為附加代碼。次的事件處理自動生成所需要的在所熟知的很多 GUI 工具包中,窗口小(widget)都有一個回調函數用于響應它們能觸發(fā)的每個動作,這個回調函數通常是一個指向某個函數的指針。但是,在QT 中信號和槽取代了這些凌亂的函數指針,使得編寫這些通信程序更為簡潔明了。信號和槽能攜帶任意數量和任意類型的參

40、數,他們是類型完全安全的,不會像回調函數那樣產生core dumps。所有從 QObject 或其子類(例如 Qwidget)派生的類都能夠包含信號和槽。當對象改變其狀態(tài)時,信號就由該對象發(fā)射(emit)出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作一個真正的組件來使用。槽用于接收信號,但它們是普通的對象成員函數。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制。(trolltech,2005)你可以將很多信號與單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至于將一個信號與另外一個信號相連接也是可

41、能的,這時無論第一個信號什么時候發(fā)射系統都將立刻發(fā)射第二個信號??傊?,信號與槽構造了一個強大的編程機制。(Jasmin Blanchette,1998)當某個信號對其客戶或所有者發(fā)生的狀態(tài)發(fā)生改變,信號被一個對象發(fā)射。只有 定義過這個信號的類及其派生類能夠發(fā)射這個信號。當一個信號被發(fā)射時,與其相關聯的槽將被立刻執(zhí)行,就象一個正常的函數調用一樣。信號-槽機制完全獨立于任何GUI 事件循環(huán)。只有當所有的槽返回以后發(fā)射函數(emit)才返回。 如果存在多個槽與某個信號相關聯,那么,當這個信號被發(fā)射時,這些槽將會一個接一個地執(zhí)行,但是它們執(zhí)行的順序將會是隨機的、不確定的,不能人為地指定哪個先執(zhí)行、哪個

42、后執(zhí)行。信號的是在頭文件中進行的,QT 的signals 關鍵字進入了信號區(qū),隨后即可自己的信號。槽是普通的C+成員函數,可以被正常調用,它們唯一的特殊性就是很多信號可以與其相關聯。當與其關聯的信號被發(fā)射時,這個槽就會被調用。槽可以有參數,但槽的參數不能有缺省值。既然槽是普通的成員函數,因此與其它的函數一樣,它們也有存取權限。槽的存取權限決定了誰能夠與其相關聯。同普通的C+成員函數一樣,槽函數也分為三種類型,即public slots、private slots 和protected slots。public slots:在這個區(qū)內的槽意味著任何對象都可將信號與之相連接。這對于組件編程非常有用

43、,你可以創(chuàng)建彼此互不了解的對象,將它們的信號與槽進行連接以便信息能夠正確的傳遞。protected slots:在這個區(qū)內的槽意味著當前類及其子類可以將信號與之相連接。這適用于那些槽,它們是類實現的一部分,但是其界面接口卻面向外部。private slots:在這個區(qū)內用于聯系非常緊密的類。的槽意味著只有類自己可以將信號與之相連接。這適槽也能夠為虛函數,這也是非常有用的。槽的也是在頭文件中進行的。通過調用 QObject 對象的 connect 函數來將某個對象的信號與另外一個對象的槽函數相關聯,這樣當發(fā)射者發(fā)射信號時,接收者的槽函數將被調用。該函數的定義如下:bool QObject:con

44、nect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) sic 。這個函數的作用就是將發(fā)射者 sender 對象中的信號 signal 與接收者 receiver 中的member 槽函數聯系起來。當指定信號 signal 時必須使用 QT 的宏SIGNAL(),當指定槽函數時必須使用宏SLOT()。如果發(fā)射者與接收者屬于同一個對象的話,那么在 connect調用中接收者參數可以省略。元對象編譯器 moc(meta object compiler)對

45、C+文件中的類進行分析并產生用于初始化元的C+代碼,元對象包含全部信號和槽的名字以及指向這些函數的指針。moc 讀C+源文件,如果發(fā)現有 Q_OBJECT 宏的類,它就會生成另外一個 C+源文件,這個新生成的文件中包含有該類的元對象代碼。例如,假設有一個頭文件mysignal.h,在這個文件中包含有信號或槽的,那么在編譯之前 moc 工具就會根據該文件自動生成一個名為mysignal.moc.h 的C+源文件并將其提交給編譯器;類似地,對應于mysignal.cpp 文件moc 工具將自動生成一個名為mysignal.mo譯器3。p 文件提交給編元對象代碼是signal/slot 機制所必須的

46、。用 moc 產生的 C+源文件必須與類實現一起進行編譯和連接,或者用#include 語句將其包含到類的源文件中。moc 并不擴展#include 或者#define 宏定義,它只是簡單的跳過所遇到的任何預處理指令。一個小例子一個最小的C+類 class Foopublic:Foo ();如下:value () const return val ;void setValue ( private:val;);一個小的 Qt 類如下:Class Foo: public QObject Q_OBJECTPublic:Foo ();value () const return val ; public

47、 slots:void setValue(signals:);void valueChanged (); private:val;這個類有同樣的狀態(tài),和公有方法狀態(tài),但是另外它也支持使用信號和槽的組件編程:這個類可以通過發(fā)射一個信號:valueChanged()來告訴外界它的狀態(tài)發(fā)生了變化,并且它有一個槽,其它對象可以發(fā)送信號給這個槽。所有包含信號和/或者槽的類必須在它們的中提到 Q_OBJECT4。槽可以由應用程序的編寫者來實現。這里是Foo:setValue()一個可能的實現:Void Foo:setValue (if (v != val) val = v;v)emit valueChan

48、ged (v);emit valueChanged(v)這一行從對象中發(fā)射valueChanged 信號。正如你所能看到的,你通過使用emit signal(arguments)來發(fā)射信號。下面是把兩個對象連接在一起的法:Foo a, b;connect (&a, SIGNAL (valueChanged ( b.setValue (11); / a = undefined b = 11), &b, SLOT (setValue ();a.setValue (79); / a = 79b.value ();b = 79調用a.setValue(79)會使 a 發(fā)射一個valueChanged(

49、) 信號,b 將會在它的 setValue()槽中接收這個信號,也就是 b.setValue(79) 被調用。接下來 b 會發(fā)射同樣的 valueChanged()信號,但是因為沒有槽被連接到b 的valueChanged()信號,所以沒有發(fā)生任何事(信號了)。注意:只有當 v != val 的時候 setValue()函數才會設置這個值并且發(fā)射信號。這樣就避免了在循環(huán)連接的情況下(比如 b.valueChanged() 和 a.setValue()連接在一起)出現無休止的循環(huán)的情況。這個例子說明了對象之間可以在互相不知道的情況下一起工作,只要在最初的時在它們中間建立連接。預處理程序改變或者移

50、除了 signals、slots 和emit 這些關鍵字,這樣就可以使用標準的C+編譯器。在一個定義有信號和槽的類上運行moc。這樣就會生成一個可以和其它對象文件編譯和連接成程序的C+源文件。2.7 元對象系統(Meta-Object System)Qt 的一個最主要的特點可能就是它擴展了C+的機制,可以創(chuàng)建獨立的這些組件可以被綁定在一起,而不需要互相的任何了解。組件,這個機制被成為元對象系統,它提供了兩個關鍵服務:信號/槽、運行時的類型信息和動態(tài)屬性系統(內省機制)。內省機制對于實現信號和槽是必須的,并且允許應用程序員在程序運行時獲得“元信息”(包括被對象支持的信號和槽的列表,以及這些信號/

51、槽所在的類的名稱)。內省機制同時支持“”(對于 Qt Designer)和文本翻譯(國際化),它還是 Qt 應用程序(Qt Script for Application)的基礎。標準的C+并不提供對于 Qt 的元對象系統所需要的動態(tài)元信息的支持。Qt 提供了一個單獨的工具:元對象編譯器(moc)來解決這個問題。Moc 用來Q_OBJECT類的定義,使這些信息在 C+函數中可用。由于 moc 使用純粹的 C+函數來實現,所以 Qt 的元對象系統在任何 C+編譯器下都可以工作。元對象系統這樣工作:Q_OBJECT 宏一些內省函數(metaObject(),TR(),qt_mall()和少量其他的函

52、數)。這些函數必須在所有的 QObject 的子類中被實現。Qt 的moc 工具負責執(zhí)行被 Q_OBJECT 宏的函數,同時負責執(zhí)行所有的信號函數。QObject 的成員函數,例如connect()和disconnect(),使用內省函數來工作。元對象系統基于以下三類:1)、QOBJECT 類;2)、類中的私有段的 Q_OBJECT 宏;3)、元對象編譯器。MocC+源文件。如果它發(fā)現其中包含一個或多個類的中含有 Q_OBJECT宏,它就會給含有 Q_OBJECT 宏的類生成另一個含有元對象代碼的 C+源文件。這個生成的源文件可以被類的源文件包含(#include)到或者和這個類的實現一起編譯

53、和連接5。除了提供對象間通訊的信號和槽機制之外(這也是介紹這個系統的主要原因),QObject 中的元對象代碼也實現其它特征:1)、claame()函數在運行的時候以字符串返回類的名稱,不需要 C+編譯器中的運行時刻類型識別(RTTI)的支持。2)、inherits()函數返回這個對象是否是一個繼承于 QObject 繼承樹中一個特定類的類的實例。3)、tr()和 trUtf8()兩個函數是用于的字符串翻譯。4)、setPorperty()和 property()兩個函數是用來通過名稱動態(tài)設置和獲得對象屬性的。 5)、metaObject()函數返回這個類所關聯的元對象。雖然使用 QObjec

54、t 作為一個基類而不使用 Q_OBJECT 宏和元對象代碼是可以的,但是如果 Q_OBJECT 宏沒有被使用,那么這里的信號和槽以及其它特征描述都不會被提供。根據元對象系統的觀點,一個沒有元代碼的 QObject 的子類和它含有元對象代碼的最近的祖先相同。舉例來說就是,claame()將不會返回你的類的實際名稱,返回的是它的這個祖先的名稱。強烈建議 QObject 的所有子類使用 Q_OBJECT 宏,而不管它們是否實際使用了信號、槽和屬性。第三章 系統設計與實現3.1 需求分析系統設計準備工作如下所示。(1)Qt Designer 是設計窗口組件(Widget)的應用程序,在安裝 Qt 的b

55、in 目錄下鍵入./designer,將啟動一個包含很多 Qt 組件的可視化界面。在此組織應用程序的各組件分布很方便,最后可生成一個file.ui 和main.cpp 文件;file.ui 是用 XML 語言寫的一個文本6。(2)Uic(Usererface Compiler)是從 XML 文件生成代碼的用戶界面編譯器,用來將file.ui 文件生成file.h 和file.cpp 文件(命令如:uic -o file.h file.ui uic -o file.cpp -i file.h file.ui),但生成的這兩個文件不是標準的純 C+代碼.通常稱為 Qt 的 c+擴展.因為 Qt的對

56、象問中運用了信號/槽的通信機制,在文件中用 Q_OBJECT 宏來標識。(3)用 qmake 工具生成 文件,在設置好環(huán)境變量后,用 tmake 工具生成Makefile 文件(tmake 是跨Makefile);不管在Pc 環(huán)境、Qt/Embedded 環(huán)境還是交叉編譯環(huán)境中都能生成相應的Makefile 文件。(4)moc(元對象編譯器)用來一個C+文件中的類并且生成初始化對象的c+代碼,moc 在c+源文件,如果發(fā)現其中一個或多個類的中含有 Q_OBJECT宏,就給出這個使用 Q_OBJECT 宏的類生成另外一個包含元對象代碼的C+元文件;元對象代碼對信號/槽機制、運行時類型信息和動態(tài)屬

57、性系統是需要的7。(5)用 make 命令生成可執(zhí)行的二進制代碼文件;由于使用 tmake 生成 Makefile 文件,當需要的時候,編譯規(guī)則中包含調用 moc(元對象編輯器),自動地被連編系統調用,不需要手工調用。由于是用程序實現界面的設計,而不是用 QT 設計器,所以在程序里必須用 QT 語言設計cnt 客戶端和server 服務端的界面;客戶端的程序主要是實現客戶端界面設計、創(chuàng)建socket 以及連接各種各樣的信號界面上各種按鍵的功能。服務端的額程序是主要實現處理客戶端的請求、處理服務器新的連接和為服務器提供一個 GUI 界面。輸入的形式和輸入值的范圍用鍵盤輸入數據,并且數據必須是在

58、0 到 9 的范圍內的整數。輸出的形式當輸入時 0 到 9 內的任何一個整數時,如果與事先隨機產生的數字相等,則提示用戶猜對了。否則,提示錯誤并把正確數字發(fā)送給客戶顯示出來。當輸入的是字符或空格時,將提示輸入 0 到 9 范圍內的數字。3.2 系統功能設計啟動N端為 4800 且IP 為服務器的 IP?Y范N圖 3.1 客戶端業(yè)務流程圖輸入數據位 0-9圍內的整數?Y輸入的數與隨機產生的數相等?Y提示正確N提示輸入正確的數提示錯誤,并輸出正確連接失敗啟動N客戶端連接上服務端?Y關閉圖 3.2服務器端業(yè)務流程圖圖 3.3 通信機制原理圖3.3 主要的類及抽象數據類型的定義CntSocket 類:

59、定義CntSocket 類公有繼承 QSocket,服務器與客戶端建立連接后,服務器創(chuàng)建一個CntSocket 來處理請求。沒有任何顯示顯示新連接SimpleServer 類:定義SimpleServer 類公有繼承 QServerSocket,SimpleServer 類用來處理服務器新的連接,對于每一個客戶端的連接,它都創(chuàng)建一個新的 C ntSocket, SimpleServer 用來處理與客戶端的聯系。ServerInfo 類:定義 ServerInfo 類公有繼承 QVBox,為服務器提供一個 GUI 界面8。QserverSocket 類: QServerSocket 是 serv

60、er socket 的一個封裝。QServerSocket 是一個基于 TCP/IP 的服務器類,它能建立服務器狀態(tài),當有到請求后,就會建立其一個處理連接的socket 來,因此,在服務器端,需要同時使用 QSocket, QServerSocket類9。Qsocket 類 :QSocket 類提供了一個有緩沖的TCP 連接,在這個類中,可以調用的connectToHost()、bytesAvailable()、canReadLine()這些函數。connectToHost()是一個最常用的函數,打開一個被命名的主機的連接。當 connectToHost()已經完成它的 DNS 查找并且正在開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論