07通信qt設(shè)計(jì)胡初稿_第1頁
07通信qt設(shè)計(jì)胡初稿_第2頁
07通信qt設(shè)計(jì)胡初稿_第3頁
07通信qt設(shè)計(jì)胡初稿_第4頁
07通信qt設(shè)計(jì)胡初稿_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余28頁可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘要Linux 操作系統(tǒng)是現(xiàn)在流行的一種免費(fèi)的操作系統(tǒng),它完全符合準(zhǔn),擁有強(qiáng)大的網(wǎng)絡(luò)功能和良好的可移植性,系統(tǒng)的開發(fā)就是基于這個(gè)IX 標(biāo)。為了用戶操作的方便,系統(tǒng)用 QT 來實(shí)現(xiàn)系統(tǒng)的用戶界面,它 是一個(gè)跨的 C+圖形用戶界面庫,由挪威 TrollTech 公司。本文主要在 QT 框架設(shè)計(jì)了一個(gè)server 端和c nt 端的界面。主要是修改槽和按鍵,主要實(shí)現(xiàn) send、connection、 Close connection、Quit 這四個(gè)按鍵的功能。接下來實(shí)現(xiàn)客戶端和服務(wù)端各自的算法模塊,客戶端實(shí)現(xiàn)的是判斷輸入的數(shù)是否符合基本要求,輸入的數(shù)必須是 0到 9 之間的任何一個(gè)整數(shù);而服務(wù)端實(shí)

2、現(xiàn)的是將輸入的數(shù)字與事先隨機(jī)產(chǎn)生的數(shù)相比較,若相等,則在客戶端輸出回答正確,若不等,則提示錯(cuò)誤,并輸出正確。最后是 socket 通信,在 server 端和 cnt 端各建立多個(gè)類模塊來實(shí)現(xiàn)socket通信。關(guān)鍵字:Linux,QT,socket 通信AbstractLinux operating system is now a popular free operating system, which fullycomply withIX standards, has a strong network function and good portability,system developm

3、ent is based on this platform. For user convenience, the system usesQT to achieve the systems usererface, it is a cross-platform C + + graphical usererface library, the company produced by the Norwegian TrollTech. QT frameworkin this pr designed a server-side and cnt-sideerface. Was modified groovea

4、nd keys, the main achievemend, connection, Close connection, Quit the function of these four buttons. Then the cnt and server to achieve their algorithm module,the cnt input to achieve is to determine whether the number of basic requirements,enter the number betn 0 and 9 must be anyeger; the server

5、implemenion isthe input the number of randomly generated numbers with the prior comparison, if equal, the output of the c nt to answer correctly, if so, then an error, and output the correct answer. Finally, socket communication, the server side and c nt side of theclass module to create multiple so

6、cket communication.Keywords: Linux, QT, socket communication目錄1. 前言41.1 緒論4QT 與 Linux 發(fā)展現(xiàn)狀4Qt 概述4QT 發(fā)展歷史5QT 優(yōu)點(diǎn)6Linux 操作系統(tǒng)的產(chǎn)生及發(fā)展6Linux 操作系統(tǒng)的特點(diǎn)8QT 信號(hào)與槽機(jī)制8元對(duì)象系統(tǒng)(Meta-Object System)13KDE 和 GNOME14課題研究?jī)?nèi)容161.3.1 QT 的安裝161.32.系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)19需求分析19系統(tǒng)功能設(shè)計(jì)20主要的類及抽象數(shù)據(jù)類型的定義21系統(tǒng)實(shí)現(xiàn)22算法設(shè)計(jì)22程序設(shè)計(jì)流程243.系統(tǒng)測(cè)試23.4測(cè)試

7、定義27測(cè)試概述27測(cè)試的原則27測(cè)試的內(nèi)容29驗(yàn)證(verification)29確認(rèn)(validation)29.293.54.總結(jié)31參 考 文 獻(xiàn)32致謝331.前言1.1 緒論本次畢業(yè)設(shè)計(jì)課題是我從未接觸過的,是為了讓理解QT以及怎樣使用Linux 環(huán)境下的 QT 圖像設(shè)計(jì),為即將走上工作崗位的打基礎(chǔ),最后,讓了解并達(dá)到熟練使用 QT的要求。1.2 QT 與 Linux 發(fā)展現(xiàn)狀1.2.1 Qt 概述Qt 是Trolltech 公司的一個(gè)產(chǎn)品。Qt 是一個(gè)多的C+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立圖形用戶界面應(yīng)用程序所需的所有功能。Qt 是完全面年早些時(shí)候,Qt象的

8、,它很容易擴(kuò)展,并且允許真正的組件編程。自從 1996進(jìn)入商業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt 也是流行的 Linux 桌面環(huán)境 KDE 的基礎(chǔ)。(KDE 是所有主要的Linux版的一個(gè)標(biāo)準(zhǔn)組件)Qt 支持下述:MS/Windows - 95、98、NT 4.0、ME、和 2000Unix/X11 - Linux、SunSGI IRIX 和其它很多 X11、paq Tru64 UNIX、IBM AIX、Macosh - Mac OS XEmbedded - 有幀緩沖(frame buffer)支持的Linux。Qt 提供了一組范圍相當(dāng)廣泛的 C+類庫,并包含了幾種命

9、令行和圖形界面的工具,有效地使用這些工具可以加速開發(fā)過程。主要組成部分如下所示。Qt Designer:Qt 設(shè)計(jì)器。用來可視化地設(shè)計(jì)應(yīng)用程序界面。Qt Linguist:Qt 語言學(xué)家。用來翻譯應(yīng)用程序。以此提供對(duì)多種語言的支持。Qmake:使用此工具可以由簡(jiǎn)單的、與無關(guān)的工程文件來生成編譯所需的Makefile。Qt Assistant:關(guān)于 Qt 的幫助文件。類似于MSDN??梢钥焖俚匕l(fā)現(xiàn)你所需要的幫助。moc:元對(duì)象編譯器。uic:用戶界面編譯器。在程序編譯時(shí)被自動(dòng)調(diào)用,通過 ui_*.h 文件生成應(yīng)用程序界面。qembed:轉(zhuǎn)換數(shù)據(jù),比如,將Linux 下 Qt 開發(fā)環(huán)境搭建轉(zhuǎn)換為C

10、+代碼。1.2.2 QT 發(fā)展歷史Qt 是一個(gè)跨的 C+ 圖形用戶界面庫,由挪威 TrollTech 公司,目前包括 Qt, 基于 Framebuffer 的 Qt Embedded,快速開發(fā)工具 Qt Designer,工具 Qt Linguist 等部分 Qt 支持所有 Unix 系統(tǒng),當(dāng)然也包括 Linux,還支持 WinNT/Win2k,Win95/98。(,2008)Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序員 就已經(jīng)開始設(shè)計(jì) Qt 了,Qt 的第一個(gè)商業(yè)版本于 1995 年推出然后Qt的發(fā)展就很快了,下面是 Qt 發(fā)

11、展史上的一些里程碑:1996 Oct KDE 組織成立1998 Apr 05 Trolltech 的程序員在 5 天之內(nèi)將 Netsc Qt 上5.0 從 Motif 移植到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ā)布1999 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

12、.1 發(fā)布2000 Oct 30 Qt/Embedded 開始使用 GPL2000 Sep 04 Qt free edition 開始使用 GPL1.2.3 QT 優(yōu)點(diǎn)基本上,Qt 同 X Window 上的 Motif、Openwin、GTK 等圖形界面庫和Windows 臺(tái)上的 MFC、OWL、VCL、列優(yōu)點(diǎn)。是同類型的東西,但是 Qt 具有下優(yōu)良的跨特性Qt 支持下列操作系統(tǒng):Windows 95/98、Windows NT、Linux、 Solaris、SunOS、HP-UX、DigitaIX (OSF/1, Tru64)、 Irix,F(xiàn)reeBSD、 BSD/OS、 SCO、AIX、

13、 OS390、QNX 等等。面象Qt 的良好封裝機(jī)制使得 Qt 的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來說是非常 方便的。 Qt 提供了一種稱為 signals/slots 的安全類型來替 callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單。豐富的 APIQt包 括 多 達(dá) 250個(gè) 以 上 的C+類 , 還 替 供 基 于 模 板 的collectionsserialization、 file、I/O device、 directory management、 date/time 類。甚至還包括正則表達(dá)式的處理功能。(1)(2)(3)支持 2D/3D大量的開圖形渲染,支持 O

14、penGL。檔。XML 支持。1.2.4 Linux 操作系統(tǒng)的產(chǎn)生及發(fā)展在 Linux 的發(fā)展歷程中,Unix 和 Minix 扮演著十分重要的角色。1990 年,芬蘭人 Linus Torvalads 在等候很長(zhǎng)的時(shí)間,所以 Linus大學(xué)接觸到 Unix,但是當(dāng)時(shí)上機(jī)學(xué)習(xí)要排隊(duì)了自己的 PC 機(jī),希望安裝一個(gè)類似的操作系統(tǒng)。由于 Unix 的內(nèi)核代碼不容易得到,所以他安裝了 Minix。Minix 是一個(gè)基于微內(nèi)核技術(shù)的類似于 Unix 的操作系統(tǒng),是 Andrew Tanebaum 教授利用業(yè)余時(shí)間開發(fā)的用于教學(xué)的操作系統(tǒng)。當(dāng)時(shí),Minix 并不是完全免費(fèi)的,而且 AndrewTane

15、baum 教授不允許別人為 Minix 再加入其他東西,目的是為了教學(xué)的簡(jiǎn)明扼要。在使用過程中,Linus 受 Minix 的啟發(fā),決定開發(fā)一個(gè)自己的操作系統(tǒng)。1991年,Linus 需要一個(gè)簡(jiǎn)單的終端仿真程序來存取一個(gè)組的內(nèi)容,于是自己編寫了一個(gè)程序來實(shí)現(xiàn)此目的。用 Linus 自己的話說:“在這之后,開發(fā)工作可謂一帆風(fēng)順,盡管程序代碼仍然千頭萬緒,但此時(shí)我已有一些設(shè)備,調(diào)試也相對(duì)較以前容易了。在這一階段我開始使用 C 語言編寫代碼,這使得開發(fā)工作加快了許多。與此同時(shí),我產(chǎn)生了一個(gè)大膽的夢(mèng)想:制作一個(gè)比 Minix 更好的Minix?!被鹃_發(fā)工作持續(xù)兩個(gè)月,直到有了一個(gè)磁盤驅(qū)動(dòng)和一個(gè)小的文

16、件系統(tǒng)。1991 年 8 月,Linus 對(duì)外發(fā)布了一套新的操作系統(tǒng),源代碼放在芬蘭最大的 FTP上,并放在名為L(zhǎng)inux 的目錄中,Linux 也因此而得名。與 Minix 不同,Linux 不是一種公益,不是共享,它是一種,免費(fèi)的!這里的“”體現(xiàn)在的方面,允許使用者隨意更改系統(tǒng),為系統(tǒng)加入任何功能。也正是這種,使得它不斷地發(fā)揚(yáng)光大。1991 年 10 月 5 日,Linus 宣布了 Linux 系統(tǒng)的第一個(gè)正式的版本,其版本號(hào)為 0.02。此版本的 Linux 能夠運(yùn)行g(shù)un 的bourne again s的編譯器gcc,但是應(yīng)用程序還不多。bash s以及gunLinus 是一個(gè)完全的理

17、想主義者,他希望 Linux 是一個(gè)完全免費(fèi)的操作系統(tǒng)。1993 年,Linux 的第一個(gè)“產(chǎn)品”版 1.0 問世時(shí),是按完全擴(kuò)散進(jìn)行擴(kuò)散的。它要求所有的源碼必須公開,而且任何人均不得從 Linu易中獲利。同時(shí),Linux 給了用戶充分的,它從一開始就連同源代碼一起提供給服務(wù)用戶,允許用戶進(jìn)行任何更改,增加任何功能。Linus 采用了一個(gè)比 GPL 還要嚴(yán)格的證以確保Linux 內(nèi)核是的。但是,半年之后,他漸漸地發(fā)現(xiàn)這種純粹自由的方式實(shí)際上限制了Linux 的。于是,Linus 轉(zhuǎn)身了 GNU 的 GPL。也正是由于采用了 GPL2005),Linux 今天才有如此多的版。(蓉,要使 Linu

18、x 成為一個(gè)理想的操作系統(tǒng),是一項(xiàng)十分巨大的工程。Linus 認(rèn)識(shí)到單靠一個(gè)人的力量是的,它需要來自世界各地的編程共同努力。因此任何人想往內(nèi)核中加入新的特性,只要被認(rèn)為是有用的,合理的。Linus 就允許加入。就這樣,Linux 在來自世界各地的眾的共同協(xié)作下發(fā)展了起來。下面是Linux 發(fā)展過程中的重要里程碑。1990 年,Linus Torvalad 首次接觸Minix;1991 年,Linus Torvalad 開始在Minix 上編寫各種驅(qū)動(dòng)程序等操作系統(tǒng)內(nèi)核組件;1991 年,Linus Torvalad 公開了Linux 內(nèi)核;1993 年,Linux 1.0 版,Linux 轉(zhuǎn)向

19、 GPL協(xié)議;1994 年,Linux 的第一個(gè)商業(yè)版式Slackware 問世;1996 年,IX 標(biāo)準(zhǔn);技術(shù)局的計(jì)算機(jī)系統(tǒng)確認(rèn) Linux 版本 1.2.13符合1997 年,Linux 的簡(jiǎn)體中文版相繼問世;2001 年,Linux 2.4 版內(nèi)核發(fā)布;2003 年,Linux 2.6 版內(nèi)核發(fā)布;1.2.5 Linux 操作系統(tǒng)的特點(diǎn)Linux 作為一種流行的操作系統(tǒng),在市場(chǎng)上占有越來越大的份額,很多人特別是程序員紛紛轉(zhuǎn)向 Linux,Linux 逐漸成為的一個(gè)強(qiáng)勁對(duì)手。Linux 是類 Unix 的實(shí)現(xiàn),具有強(qiáng)大的功能,很好地支持了各種現(xiàn)代編程技術(shù),具有以下主要特點(diǎn)。開放,真正的多任

20、務(wù)多用戶,UNIX 的完整實(shí)現(xiàn),完全符合IX 標(biāo)準(zhǔn),良好的用戶界面,強(qiáng)大的網(wǎng)絡(luò)功能,良好的可移植性,設(shè)備獨(dú)立性。1.2.6 QT 信號(hào)與槽機(jī)制信號(hào)和槽機(jī)制是 QT 的機(jī)制,要精通 QT 編程就必須對(duì)信號(hào)和槽有所了解。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是 QT 的特性,也是 QT 區(qū)別于其它工具包的重要地方。信號(hào)和槽是 QT 自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的 C/C+語言,因此要正確的處理信號(hào)和槽,必須借助一個(gè)稱為moc(Meta Object Compiler)的 QT 工具,該工具是一個(gè)C+預(yù)處理程序,它為次的事件處理自動(dòng)生成所需要的附加代碼。在所熟知的很多 GUI 工具

21、包中,窗口小(widget)都有一個(gè)回調(diào)函數(shù)用于響應(yīng)它們能觸發(fā)的每個(gè)動(dòng)作,這個(gè)回調(diào)函數(shù)通常是一個(gè)指向某個(gè)函數(shù)的指針。但是,在 QT 中信號(hào)和槽取代了這些凌亂的函數(shù)指針,使得編寫這些通信程序更為簡(jiǎn)潔明了。 信號(hào)和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會(huì)像回調(diào)函數(shù)那樣產(chǎn)生core dumps。所有從 QObject 或其子類(例如 Qwidget)派生的類都能夠包含信號(hào)和槽。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射(emit)出去,這就是對(duì)象所要做的全部事情,它不知道另一端是誰在接收這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的組件來使用。槽用于接收信號(hào),但它們是普通

22、的對(duì)象成員函數(shù)。一個(gè)槽并不知道是否有任何信號(hào)與自己相連接。而且,對(duì)象并不了解具體的通信機(jī)制。(trolltech,2005)你可以將很多信號(hào)與單個(gè)的槽進(jìn)行連接,也可以將單個(gè)的信號(hào)與很多的槽進(jìn)行連接,甚至于將一個(gè)信號(hào)與另外一個(gè)信號(hào)相連接也是可能的,這時(shí)無論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào)。總之,信號(hào)與槽構(gòu)造了一個(gè)強(qiáng)大的編程機(jī)制。(Jasmin Blanchette,1998)當(dāng)某個(gè)信號(hào)對(duì)其客戶或所有者發(fā)生的狀態(tài)發(fā)生改變,信號(hào)被一個(gè)對(duì)象發(fā)射。只有 定義過這個(gè)信號(hào)的類及其派生類能夠發(fā)射這個(gè)信號(hào)。當(dāng)一個(gè)信號(hào)被發(fā)射時(shí),與其相關(guān)聯(lián)的槽將被立刻執(zhí)行,就象一個(gè)正常的函數(shù)調(diào)用一樣。信號(hào)-槽機(jī)制完

23、全獨(dú)立于任何 GUI 事件循環(huán)。只有當(dāng)所有的槽返回以后發(fā)射函數(shù)(emit)才返回。 如果存在多個(gè)槽與某個(gè)信號(hào)相關(guān)聯(lián),那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),這些槽將會(huì)一個(gè)接一個(gè)地執(zhí)行,但是它們執(zhí)行的順序?qū)?huì)是隨機(jī)的、不確定的,不能人為地指定哪個(gè)先執(zhí)行、哪個(gè)后執(zhí)行。信號(hào)的是在頭文件中進(jìn)行的,QT 的signals 關(guān)鍵字自己的信號(hào)。進(jìn)入了信號(hào)區(qū),隨后即可槽是普通的C+成員函數(shù),可以被正常調(diào)用,它們唯一的特殊性就是很多信號(hào)可以與其相關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號(hào)被發(fā)射時(shí),這個(gè)槽就會(huì)被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。既然槽是普通的成員函數(shù),因此與其它的函數(shù)一樣,它們也有存取權(quán)限。槽的存取權(quán)限決定了誰能夠與其相

24、關(guān)聯(lián)。同普通的 C+成員函數(shù)一樣,槽函數(shù)也分為三種類型,即public slots、private slots 和protected slots。public slots:在這個(gè)區(qū)內(nèi)的槽意味著任何對(duì)象都可將信號(hào)與之相連接。這對(duì)于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對(duì)象,將它們的信號(hào)與槽進(jìn)行連接以便信息能夠正確的傳遞。protected slots:在這個(gè)區(qū)內(nèi)的槽意味著當(dāng)前類及其子類可以將信號(hào)與之相連接。這適用于那些槽,它們是類實(shí)現(xiàn)的一部分,但是其界面接口卻面向外部。private slots:在這個(gè)區(qū)內(nèi)接。這適用于聯(lián)系非常緊密的類。的槽意味著只有類自己可以將信號(hào)與之相連槽也能夠?yàn)樘摵瘮?shù),

25、這也是非常有用的。槽的也是在頭文件中進(jìn)行的。通過調(diào)用 QObject 對(duì)象的 connect 函數(shù)來將某個(gè)對(duì)象的信號(hào)與另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號(hào)時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) sic 。這個(gè)函數(shù)的作用就是將發(fā)射者 sender 對(duì)象中的信號(hào) signal 與接收者 receiver中的member 槽函數(shù)聯(lián)系起來。當(dāng)指定信號(hào) si

26、gnal 時(shí)必須使用 QT 的宏SIGNAL(),當(dāng)指定槽函數(shù)時(shí)必須使用宏SLOT()。如果發(fā)射者與接收者屬于同一個(gè)對(duì)象的話,那么在connect 調(diào)用中接收者參數(shù)可以省略。元對(duì)象編譯器moc(meta object compiler)對(duì)C+文件中的類進(jìn)行分析并產(chǎn)生用于初始化元的C+代碼,元對(duì)象包含全部信號(hào)和槽的名字以及指向這些函數(shù)的指針。moc 讀 C+源文件,如果發(fā)現(xiàn)有 Q_OBJECT 宏的類,它就會(huì)生成另外一個(gè)C+源文件,這個(gè)新生成的文件中包含有該類的元對(duì)象代碼。例如,假設(shè)我們有一個(gè)頭文件mysignal.h,在這個(gè)文件中包含有信號(hào)或槽的,那么在編譯之前 moc 工具就會(huì)根據(jù)該文件自動(dòng)

27、生成一個(gè)名為mysignal.moc.h 的C+源文件并將其提交給編譯器;類似地,對(duì)應(yīng)于 mysignal.cpp 文件moc 工具將自動(dòng)生成一個(gè)名為mysignal.mop 文件提交給編譯器。元對(duì)象代碼是signal/slot 機(jī)制所必須的。用 moc 產(chǎn)生的 C+源文件必須與類實(shí)現(xiàn)一起進(jìn)行編譯和連接,或者用#include 語句將其包含到類的源文件中。moc并不擴(kuò)展#include 或者#define 宏定義,它只是簡(jiǎn)單的跳過所遇到的任何預(yù)處理指令。一個(gè)小例子一個(gè)最小的C+類 class Foopublic:Foo ();如下:value () const return val ;void

28、 setValue ( private:val;);一個(gè)小的 Qt 類如下:Class Foo: public QObject Q_OBJECTPublic:Foo ();value () const return val ; public slots:void setValue(signals:);void valueChanged (); private:val;這個(gè)類有同樣的狀態(tài),和公有方法狀態(tài),但是另外它也支持使用信號(hào)和槽的組件編程:這個(gè)類可以通過發(fā)射一個(gè)信號(hào):valueChanged()來告訴外界它的狀態(tài)發(fā)生了變化,并且它有一個(gè)槽,其它對(duì)象可以發(fā)送信號(hào)給這個(gè)槽。所有包含信號(hào)和/或者槽

29、的類必須在它們的中提到 Q_OBJECT。槽可以由應(yīng)用程序的編寫者來實(shí)現(xiàn)。這里是 Foo:setValue()一個(gè)可能的實(shí)現(xiàn):Void Foo:setValue (if (v != val) val = v;v)emit valueChanged (v);emit valueChanged(v)這一行從對(duì)象中發(fā)射valueChanged 信號(hào)。正如你所能看到的,你通過使用emit signal(arguments)來發(fā)射信號(hào)。下面是把兩個(gè)對(duì)象連接在一起的法:Foo a, b;connect (&a, SIGNAL (valueChanged ( b.setValue (11); / a = u

30、ndefined b = 11), &b, SLOT (setValue ();a.setValue (79); / a = 79b.value ();b = 79調(diào)用a.setValue(79)會(huì)使 a 發(fā)射一個(gè)valueChanged() 信號(hào),b 將會(huì)在它的 setValue()槽中接收這個(gè)信號(hào),也就是 b.setValue(79) 被調(diào)用。接下來 b 會(huì)發(fā)射同樣的valueChanged()信號(hào),但是因?yàn)闆]有槽被連接到 b 的 valueChanged()信號(hào),所以沒有發(fā)生任何事(信號(hào)了)。注意:只有當(dāng) v != val 的時(shí)候 setValue()函數(shù)才會(huì)設(shè)置這個(gè)值并且發(fā)射信號(hào)。這樣

31、就避免了在循環(huán)連接的情況下(比如 b.valueChanged() 和a.setValue()連接在一起)出現(xiàn)無休止的循環(huán)的情況。這個(gè)例子說明了對(duì)象之間可以在互相不知道的情況下一起工作,只要在最初的時(shí)在它們中間建立連接。預(yù)處理程序改變或者移除了 signals、slots 和emit 這些關(guān)鍵字,這樣就可以使用標(biāo)準(zhǔn)的C+編譯器。在一個(gè)定義有信號(hào)和槽的類上運(yùn)行moc。這樣就會(huì)生成一個(gè)可以和其它對(duì)象文件編譯和連接成程序的C+源文件。1.2.7 元對(duì)象系統(tǒng)(Meta-Object System)Qt 的一個(gè)最主要的特點(diǎn)可能就是它擴(kuò)展了 C+的機(jī)制,可以創(chuàng)建獨(dú)立的軟件組件,這些組件可以被綁定在一起,而

32、不需要互相的任何了解。這個(gè)機(jī)制被成為元對(duì)象系統(tǒng),它提供了兩個(gè)關(guān)鍵服務(wù):信號(hào)/槽、運(yùn)行時(shí)的類型信息和動(dòng)態(tài)屬性系統(tǒng)(內(nèi)省機(jī)制)。內(nèi)省機(jī)制對(duì)于實(shí)現(xiàn)信號(hào)和槽是必須的,并且允許應(yīng)用程序員在程序運(yùn)行時(shí)獲得“元信息”(包括被對(duì)象支持的信號(hào)和槽的列表,以及這些信號(hào)/槽所在的類的名稱)。內(nèi)省機(jī)制同時(shí)支持“”(對(duì)于Qt Designer)和文本翻譯(Application)的基礎(chǔ)。),它還是 Qt 應(yīng)用程序(Qt Script for標(biāo)準(zhǔn)的 C+并不提供對(duì)于 Qt 的元對(duì)象系統(tǒng)所需要的動(dòng)態(tài)元信息的支持。Qt提供了一個(gè)單獨(dú)的工具:元對(duì)象編譯器(moc)來解決這個(gè)問題。Moc 用來 Q_OBJECT 類的定義,使這些

33、信息在 C+函數(shù)中可用。由于 moc 使用純粹的 C+函數(shù)來實(shí)現(xiàn),所以 Qt 的元對(duì)象系統(tǒng)在任何 C+編譯器下都可以工作。元對(duì)象系統(tǒng)這樣工作:Q_OBJECT 宏一些內(nèi)省函數(shù)(metaObject(),TR(),qt_m他的函數(shù))。這些函數(shù)必須在所有的 QObject 的子類中被實(shí)現(xiàn)。all()和少量其Qt 的moc 工具負(fù)責(zé)執(zhí)行被 Q_OBJECT 宏信號(hào)函數(shù)。的函數(shù),同時(shí)負(fù)責(zé)執(zhí)行所有的QObject 的成員函數(shù),例如connect()和disconnect(),使用內(nèi)省函數(shù)來工作。元對(duì)象系統(tǒng)基于以下三類:1)、QOBJECT 類;2)、類中的私有段的 Q_OBJECT 宏;3)、元對(duì)象編譯

34、器。MocC+源文件。如果它發(fā)現(xiàn)其中包含一個(gè)或多個(gè)類的中含有Q_OBJECT 宏,它就會(huì)給含有 Q_OBJECT 宏的類生成另一個(gè)含有元對(duì)象代碼的C+源文件。這個(gè)生成的源文件可以被類的源文件包含(#include)到或者和這個(gè)類的實(shí)現(xiàn)一起編譯和連接。除了提供對(duì)象間通訊的信號(hào)和槽機(jī)制之外(這也是介紹這個(gè)系統(tǒng)的主要原因),QObject 中的元對(duì)象代碼也實(shí)現(xiàn)其它特征:1)、claame()函數(shù)在運(yùn)行的時(shí)候以字符串返回類的名稱,不需要 C+編譯器中的運(yùn)行時(shí)刻類型識(shí)別(RTTI)的支持。2)、inherits()函數(shù)返回這個(gè)對(duì)象是否是一個(gè)繼承于 QObject 繼承樹中一個(gè)特定類的類的實(shí)例。3)、tr

35、()和 trUtf8()兩個(gè)函數(shù)是用于的字符串翻譯。4)、setPorperty()和 property()兩個(gè)函數(shù)是用來通過名稱動(dòng)態(tài)設(shè)置和獲得對(duì)象屬性的。5)、metaObject()函數(shù)返回這個(gè)類所關(guān)聯(lián)的元對(duì)象。雖然使用 QObject 作為一個(gè)基類而不使用 Q_OBJECT 宏和元對(duì)象代碼是可以的,但是如果 Q_OBJECT 宏沒有被使用,那么這里的信號(hào)和槽以及其它特征描述都不會(huì)被提供。根據(jù)元對(duì)象系統(tǒng)的觀點(diǎn),一個(gè)沒有元代碼的 QObject 的子類和它含有元對(duì)象代碼的最近的祖先相同。舉例來說就是,claame()將不會(huì)返回你的類的實(shí)際名稱,返回的是它的這個(gè)祖先的名稱。強(qiáng)烈建議 QObje

36、ct 的所有子類使用 Q_OBJECT 宏,而不管它們是否實(shí)際使用了信號(hào)、槽和屬性。1.2.8 KDE 和 GNOME但是真正使得 Qt 在界的眾多 Widgets(如Lesstif、Gtk、EZWGL、Xforms、fltk 等等)中脫穎而出的還是基于 Qt 的重量級(jí)KDE。 有趣的是,KDE 也是使得 Trolltech 公司承受巨大壓力的一個(gè)原因。下面來看看這場(chǎng)著名的- KDE/QT .VS. Gnome/Gtk 是怎么發(fā)生的。的圖形界面一向是以 MIT 的 X Window 系統(tǒng)為標(biāo)準(zhǔn),在 Unix在商業(yè)應(yīng)用上有兩大流派,一派是以 Sun 公司的 Openlook 陣營(yíng),一派是IBM/

37、HP的 OSF (Open Software Foundation) 的 Motif, 雙方經(jīng)過多年競(jìng)爭(zhēng)之后, MotifCDE(Common最終勝出,成為最普遍使用的界面庫,后來雙方又妥協(xié)出一個(gè)Desktop Enviroment) 作 為 一 個(gè) 標(biāo) 準(zhǔn) 的 圖 形 界 面 。 但 是Motif/CDER 的價(jià)格非常昂貴,在這同時(shí)微軟的 Windows 圖形界面發(fā)展速度非??欤鳸nix 界的后起之秀 Linux 也急需一個(gè)可靠并且免費(fèi)的圖形界面。年 10 月,由開發(fā)圖形排版工具 Lyx 的德國(guó)人 Matthias Ettrich 發(fā)起了1996KDE 計(jì)劃。 KDE 的全稱為 K Des

38、ktop Environment,可以看出是針對(duì) CDE。KDE 本身為當(dāng)時(shí) Qt是采用 GPL已經(jīng)將其 Unix的,但是 KDE 卻是使用 Qt 來作為其底層庫,因版本發(fā)布了,但是Qt并不遵循 GPL, 因此開發(fā)違背了 GPL 的精KDE 被很多的作者,認(rèn)為利用非神,于是 GNU 的狂熱信徒兵分,一路是去制作 Harmonny,試圖重寫一套兼容于 Qt 的替代品,另一路是由一個(gè) 26 歲的墨西哥程序員 Miguel De Icaza下重新開發(fā)一套叫 GNOME(GNU Network Object Enviroment) 來替代KDE。由于 Linux 界的RedHat 不喜歡 KDE/Qt

39、 的,因此 RedHat 甚至專門派出了幾個(gè)全職程序員來加入 GNOME 進(jìn)行開發(fā)工作,于是一場(chǎng)同 Motif VSOpenlook 相似的就這么打起來了。Trolltech 為了 KDE 曾數(shù)次修改 Qt 的,從成立 KDE Free Qt采用的 GTK 一開始就是完全的到采用 QPL,可謂是費(fèi)盡心機(jī),但是 GNOMEGPL,因此在這個(gè)方 面 GNOME 有一定的優(yōu)勢(shì),加上 Qt/KDE 采用 C+ 開發(fā),入門的門檻比較高,而 GTK/Gnome 采用 C,因此 GNOME 吸引了的開發(fā)者,但是 KDE 畢竟先走了一步, 推出的 KDE1.1.2 十分穩(wěn)定, 而當(dāng)時(shí)急忙中推出的 GNOME1

40、.0 的系統(tǒng)穩(wěn)定性奇差,有人甚至笑稱 GNOME1.0 還沒有 KDE 1.0 Alpha 穩(wěn)定。但是 GNOME 后來發(fā)展比較快,大有迎頭趕上的勢(shì)頭。當(dāng)時(shí)雙方的開發(fā)者在網(wǎng)絡(luò) 上炒得天翻地覆,連 Linux 之父 Linus 只是說了一句喜歡用 KDE 都倍受指責(zé)。到了第三個(gè)年頭,也就是 2000 年,可謂是風(fēng)云突變,一個(gè)接一個(gè)的事件先后發(fā)生:首先是一批從 Apple 公司出來的工程師成立了一個(gè)叫Eazel 的公司替 GNOME 設(shè)計(jì)界面,然后是一批 GNOME 程序員成立了一個(gè) Helix Code公司替 GNOME 提供商業(yè)支持,而大家期待以久的 KDE 2.0 也終于發(fā)布了,了之一, 除

41、了 KDE 本身,還包括 Koffice這恐怕是目前最為龐大的套件,Kdevelop 等等大批,其主力Kounqueror 也是第一個(gè)可以同微軟的ernet Exploer 相抗衡的瀏覽器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了一個(gè) GNOME,Sun 還宣布將把重量公司自然不能坐以待斃,級(jí)辦公Star office 同 GNOME 集成, Trolltech于今年 10 月 4 日將 Qt權(quán)問題,又推出了的 free edition 變?yōu)?GPL,徹底解決了 KDE 的版Qt ,給了 GNOME 陣營(yíng)一個(gè)有力的回?fù)?。到現(xiàn)在為不能很

42、快看到結(jié)果。一般說來, 目前 GNOME止,這場(chǎng)還在繼續(xù),相信吸引的公司比較多,但是 KDE/Qt 的開發(fā)的效率和質(zhì)量比 GNOME 高,而且在Office/環(huán)境中先走一步,在一定時(shí)間內(nèi)還將處于優(yōu)勢(shì)地位。(W.RichardStevens,Stephen A.Rago,2003)1.3 課題研究?jī)?nèi)容Linux 操作系統(tǒng)是現(xiàn)在流行的一種免費(fèi)的操作系統(tǒng),它完全符合準(zhǔn),擁有強(qiáng)大的網(wǎng)絡(luò)功能和良好的可移植性,系統(tǒng)的開發(fā)就是基于這個(gè)IX 標(biāo)。為了用戶操作的方便,系統(tǒng)用 QT 來實(shí)現(xiàn)系統(tǒng)的用戶界面,它 是一個(gè)跨的 C+圖形用戶界面庫,由挪威 TrollTech 公司 。本文主要在 QT 框架設(shè)計(jì)了一個(gè) se

43、rver 端和c nt 端的界面。主要是修改槽和按鍵,主要實(shí)現(xiàn) send、connection、 Close connection、Quit 這四個(gè)按鍵的功能。接下來實(shí)現(xiàn)客戶端和服務(wù)端各自的算法模塊,客戶端實(shí)現(xiàn)的是判斷輸入的數(shù)是否符合基本要求,輸入的數(shù)必須是 0到 9 之間的任何一個(gè)整數(shù);而服務(wù)端實(shí)現(xiàn)的是將輸入的數(shù)字與事先隨機(jī)產(chǎn)生的數(shù)相比較,若相等,則在客戶端輸出回答正確,若不等,則提示錯(cuò)誤,并輸出正確。最后是 socket 通信,在 server 端和 cnt 端各建立多個(gè)類模塊來實(shí)現(xiàn)socket通信。1.3.1 QT 的安裝一般來說,居于 Qt/Embedded 開發(fā)的應(yīng)用程序最終會(huì)發(fā)布到

44、安裝有Linux 操作系統(tǒng)的小型設(shè)備上,所以使用裝有 Linux 操作系統(tǒng)的 PC 或工作站來完成 Qt/Embedded 開發(fā)是最理想的環(huán)境,當(dāng)然它也可以安裝在 UNIX 和 Windows 系統(tǒng)上。在一臺(tái)裝有Linux 操作系統(tǒng)的機(jī)器上建立 Qt/Embedded 開發(fā)環(huán)境,首先需要準(zhǔn)備安裝包:tmake 工具安裝包、Qt/Embedded 安裝包和 Qt 的 X11 版的安裝包。這些可以免費(fèi)從Trolltech 的 Web 或FTP 服務(wù)器上。其中各安裝包的主要作用是 tmake 1.11 或更高版本生成 Qt/Embedded 應(yīng)用工程的 Makefile 文件;Qt/Embedded

45、 2.3.7 是 Qt/Embedded 的安裝包;Qt 2.3.2 for X11 將產(chǎn)生x11 開發(fā)環(huán)境所需要的兩個(gè)工具。由于安裝包有許多不同版本,版本不同在使用時(shí)將造成。所以在使用時(shí)要注意一下安裝原則:選擇或了 Qt/Embedded 的某個(gè)版本的安裝包之后,下一步選擇安裝的 Qt for X11 的安裝包的版本必須比最先的 Qt/Embedded 的版本舊,這是因?yàn)?Qt for X11 的安裝包的兩個(gè)工具uic 和designer 產(chǎn)生的源文件會(huì)和 Qt/Embedded 的庫一起被編譯 ,本著“向前兼容”的原則,Qt for X11 的版本應(yīng)比 Qt/Embedded 的版本舊。1

46、、安裝tmake在Linux 命令模式下運(yùn)行以下命令:tar xft tmake-1.11.tar.gzexport TMAKEDIR=$PWD/tmake-1.11export TMAKEPATH=$TMAKEDIR/lib/qws/linux-X86-g+ export PATH=$TMAKEDIR/bin:$PATH2、安裝 Qt/Embedded 2.3.7在Linux 命令模式下運(yùn)行以下命令:tar xft qt-embedded-2.3.7.tar.gz cd qt-2.3.7export QTDIR=$PWD export QTEDIR=$QTDIRexport PATH=$QT

47、DIR/bin:$LD_LIBRARY_PATH./configure qconfig qvfb depths 4,8,16,32 make sub-srccd .“./configure qconfig qvfb depths 4,8,16,32”指定 Qt緩沖幀工具qvfb,并支持 4,8,16,32 位的顯示顏色深度。開發(fā)包生成虛擬“make sub-src”指定按精簡(jiǎn)方式編譯開發(fā)包。Qt開發(fā)包有 5 種編譯范圍的選項(xiàng),使用這些選項(xiàng)可控制 Qt 生成的庫文件的大小,編譯選項(xiàng)的具體用法運(yùn)行“./configure -help”查看。3、安裝 Qt/X11 2.3.2在Linux 命令行模式

48、下運(yùn)行以下命令:tar xfz qt-x11 -2.3.2.tar.gzcd qt-2.3.2export 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 .根據(jù)開發(fā)環(huán)境可在 configure 的參數(shù)中添加別的參數(shù),可鍵入“./configure-help”來查看。2. 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

49、2.1 需求分析系統(tǒng)設(shè)計(jì)準(zhǔn)備工作如下所示。(1)Qt Designer 是設(shè)計(jì)窗口組件(Widget)的應(yīng)用程序,在安裝 Qt 的bin 目錄下鍵入./designer,將啟動(dòng)一個(gè)包含很多 Qt 組件的可視化界面。在此組織應(yīng)用程序的各組件分布很方便,最后可生成一個(gè) file.ui 和 main.cpp 文件;file.ui 是用XML 語言寫的一個(gè)文本。(2)Uic(Usererface Compiler)是從 XML 文件生成代碼的用戶界面編譯器,用來將 file.ui 文件生成file.h 和file.cpp 文件(命令如:uic -o file.h file.ui uic -o file

50、.cpp -i file.h file.ui),但生成的這兩個(gè)文件不是標(biāo)準(zhǔn)的純 C+代碼.通常稱為 Qt的 c+ 擴(kuò)展. 因?yàn)?Qt 的對(duì)象問中運(yùn)用了信號(hào)/ 槽的通信機(jī)制,在文件中用 Q_OBJECT 宏來標(biāo)識(shí)。(3)用 qmake 工具生成 文件,在設(shè)置好環(huán)境變量后,用 tmake 工具生成Makefile 文件(tmake 是跨Makefile);不管在Pc 環(huán)境、Qt/Embedded環(huán)境還是交叉編譯環(huán)境中都能生成相應(yīng)的Makefile 文件。(4)moc(元對(duì)象編譯器)用來一個(gè)C+文件中的類并且生成初始化對(duì)象的 c+代碼,moc 在c+源文件,如果發(fā)現(xiàn)其中一個(gè)或多個(gè)類的中含有 Q_OB

51、JECT 宏,就給出這個(gè)使用 Q_OBJECT 宏的類生成另外一個(gè)包含元對(duì)象代碼的 C+元文件;元對(duì)象代碼對(duì)信號(hào)/槽機(jī)制、運(yùn)行時(shí)類型信息和動(dòng)態(tài)屬性系統(tǒng)是需要的。(5)用 make 命令生成可執(zhí)行的二進(jìn)制代碼文件;由于使用 tmake 生成Makefile 文件,當(dāng)需要的時(shí)候,編譯規(guī)則中包含調(diào)用 moc(元對(duì)象編輯器),自動(dòng)地被連編系統(tǒng)調(diào)用,不需要手工調(diào)用。由于是用程序?qū)崿F(xiàn)界面的設(shè)計(jì),而不是用 QT 設(shè)計(jì)器,所以在程序里必須用QT 語言設(shè)計(jì) cnt 客戶端和 server 服務(wù)端的界面;客戶端的程序主要是實(shí)現(xiàn)客戶端界面設(shè)計(jì)、創(chuàng)建 socket 以及連接各種各樣的信號(hào)界面上各種按鍵的功能。服務(wù)端的

52、額程序是主要實(shí)現(xiàn)處理客戶端的請(qǐng)求、處理服務(wù)器新的連接和為服務(wù)器提供一個(gè) GUI 界面。輸入的形式和輸入值的范圍用鍵盤輸入數(shù)據(jù),并且數(shù)據(jù)必須是在 0 到 9 的范圍內(nèi)的整數(shù)。輸出的形式當(dāng)輸入時(shí) 0 到 9 內(nèi)的任何一個(gè)整數(shù)時(shí),如果與事先隨機(jī)產(chǎn)生的數(shù)字相等,則提示用戶猜對(duì)了。否則,提示錯(cuò)誤并把正確數(shù)字發(fā)送給客戶顯示出來。當(dāng)輸入的是字符或空格時(shí),將提示輸入 0 到 9 范圍內(nèi)的數(shù)字。2.2 系統(tǒng)功能設(shè)計(jì)啟動(dòng)N為 4800 且端IP 為服務(wù)器的 IP?Y范N圖 3.1 客戶端業(yè)務(wù)流程圖輸入數(shù)據(jù)位 0-9圍內(nèi)的整數(shù)?Y輸入的數(shù)與隨機(jī)產(chǎn)生的數(shù)相等?Y提示正確N提示輸入正確的數(shù)提示錯(cuò)誤,并輸出正確連接失敗啟

53、動(dòng)N客戶端連接上服務(wù)端?Y關(guān)閉圖 3.2服務(wù)器端業(yè)務(wù)流程圖圖 3.3 通信機(jī)制原理圖2.3 主要的類及抽象數(shù)據(jù)類型的定義CntSocket 類:定義CntSocket 類公有繼承 QSocket,服務(wù)器與客戶端建立連接后,服務(wù)器創(chuàng)建一個(gè)CntSocket 來處理請(qǐng)求。SimpleServer 類:定義 SimpleServer 類公有繼承 QServerSocket,SimpleServer沒有任何顯示顯示新連接類用來處理服務(wù)器新的連接,對(duì)于每一個(gè)客戶端的連接,它都創(chuàng)建一個(gè)新的CntSocket,SimpleServer 用來處理與客戶端的聯(lián)系。ServerInfo 類:定義 ServerIn

54、fo 類公有繼承 QVBox,為服務(wù)器提供一個(gè) GUI界面。QserverSocket 類:QServerSocket 是server socket 的一個(gè)封裝。QServerSocket是一個(gè)基于TCP/IP 的服務(wù)器類,它能建立服務(wù)器狀態(tài),當(dāng)有到請(qǐng)求后,就會(huì)建立其一個(gè)處理連接的socket 來,因此,在服務(wù)器端,需要同時(shí)使用 QSocket, QServerSocket 類。Qsocket 類 :QSocket 類提供了一個(gè)有緩沖的TCP 連接,在這個(gè)類中,可以調(diào)用的connectToHost()、bytesAvailable()、canReadLine()這些函數(shù)。connectToHo

55、st()是一個(gè)最常用的函數(shù),打開一個(gè)被命名的主機(jī)的連接。當(dāng) connectToHost()已經(jīng)完成它的 DNS 查找并且正在開始它的TCP 連接時(shí),hostFound()被發(fā)射。當(dāng)有進(jìn)入的數(shù)據(jù)可以被時(shí),readyRead ()這個(gè)信號(hào)被發(fā)射,可以用它來些動(dòng)作槽,完成響應(yīng)。其他的一QVBox 類:該 QVBox提供其子垂直幾何管理,即它可以把它的子窗口垂直地放在自己里面。2.4 系統(tǒng)實(shí)現(xiàn)2.4.1 算法設(shè)計(jì)(a)客戶端的算法設(shè)計(jì):在 sendToServer()函數(shù)中調(diào)用了 c 庫的函數(shù):strcmp 和 atoi,其中 strcmp 調(diào)用 2 次主要是讓客戶端只能輸入 0-9 的數(shù)字atoi

56、主要是來后直接發(fā)送的情況。用戶沒有輸入數(shù)字void QCnt:sendToServer()/ write to the server char s10 = 9;char t10 = 0; ret1, ret2,ret3;if (QSocket:Connected = socket-se()QTextStream os(socket);ret1 = strcmp(s,inputText-text(); ret2 = strcmp(t, inputText-text(); if(ret1 0) )infoText-append(tr(Please input a number from 0 to

57、9n);elseret3 = atoi(inputText-text(); if(ret3 9)inputText-del();elseos text() setText();else/ The socket is unconnectedinfoText-append(tr(The server is lostn);(b)服務(wù)端的算法設(shè)計(jì):該類中定義的slot-readCnt()主要處理客戶端的發(fā)送過來的數(shù)據(jù),猜字的算法也體現(xiàn)在這里。private slots:void readCnt()while ( canReadLine() )QTextStream os( this); randomN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論