基于TCPIP協(xié)議的QtE網(wǎng)絡編程.ppt_第1頁
基于TCPIP協(xié)議的QtE網(wǎng)絡編程.ppt_第2頁
基于TCPIP協(xié)議的QtE網(wǎng)絡編程.ppt_第3頁
基于TCPIP協(xié)議的QtE網(wǎng)絡編程.ppt_第4頁
基于TCPIP協(xié)議的QtE網(wǎng)絡編程.ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,劉學鋼,基于TCP/IP協(xié)議的QtE網(wǎng)絡編程,2,內(nèi)容概要, QtE的網(wǎng)絡編程演示 講解主要內(nèi)容: 一、嵌入式GUI介紹 主要解決問題:為何選用Qt及如何使用Qt。 二、QtE的網(wǎng)絡編程 主要解決問題:如何使用QtE實現(xiàn)網(wǎng)絡編程,比較QtE下的幾種網(wǎng)絡協(xié)議,并通過實例闡述QtE實現(xiàn)網(wǎng)絡編程要點。 三、QtE中的幾個關(guān)鍵技術(shù) 主要解決問題:闡述如何鏈接SQLite數(shù)據(jù)庫、多線程的必要性及其設計方法以及Qt中的刷屏技術(shù)。 四、工作中出現(xiàn)的一些問題及后續(xù)工作展望 主要解決問題:闡述設計過程中的遇到的一些實際問題及解決方法和一些有待于解決的問題。,3,第一章 嵌入式GUI介紹,一、幾種嵌入式GUI

2、 1、 MicroWindows Century軟件公司維護的,較早出現(xiàn)的開放源代碼的嵌入式GUI 特點: (1)主要特色:提供較為完善的圖形功能,支持多種外部設備輸入,包括LCD、鼠標和鍵盤等。 (2)核心是基于顯示設備接口的,絕大部分使用C語言開發(fā)的,移植性很強。 (3)主要在linux、wince等操作系統(tǒng)上運行。,4,2、MiniGUI 我國為數(shù)不多的在國際比較知名的自由軟件之一,早期有魏永明先生和許多志愿者開發(fā),現(xiàn)在有北京飛漫公司()進行維護和商業(yè)運作。 特點: (1)主要特色:輕量級的圖形界面,MiniGUI代碼都采用c語言開發(fā),提供完備的多窗口機制和消息傳遞機制。 (2)完善的多

3、字符集支持,提供中韓日等多輸入字體。 (3)提供MiniGUI-Threads、MiniGUI-Lite、MiniGUI-standone三種不同架構(gòu)版本以滿足不同的嵌入式OS。 (4)提供豐富的應用軟件,5,3、Qt/Embedded(簡稱QtE) 是一個專門為嵌入式系統(tǒng)設計圖形用戶界面的工具包,挪威Trolltech公司產(chǎn)品。1995年正式發(fā)行第一個版本Qt0.9。Linux桌面系統(tǒng)的KDE就是基于Qt庫開發(fā)的,Qt與linux操作系統(tǒng)的兼容性最好。 特點: (1)主要特色:支持多種平臺,移植時只需重新編譯代碼而不需要對代碼進行修改。 (2)模塊化,可剪裁,極其適合嵌入式系統(tǒng)的“小而快”的

4、要求。 (3)用C+編寫,為開發(fā)者提供清晰的框架。 (4)For free版本代碼完全開放。(),6,1、Qt的在多種操作系統(tǒng)平臺下安裝 (1)Windows下的Qt Qt從3.0版本開始,在Windows下的功能日趨強大,可以很方便的在Windows平臺下安裝、編譯、調(diào)試、運行。 下面以Qt4.2.2在windows xp OS下的安裝為例,闡述安裝注意事項 首先安裝MinGW。MinGW是指之用自由軟件來生成純粹的Win32可執(zhí)行文件,它是Minnimalist GUN on windows的縮寫。MinGW是一些頭文件和端口庫的集合,允許開發(fā)者在沒有第三方動態(tài)鏈接庫情況下使用GCC產(chǎn)生W

5、indows32程序,它并不是只是c/c+編譯器,而是GUN工具合集。在這里我們用它專門來編譯Qt源代碼以生成.exe可執(zhí)行文件。 安裝qt-win-opensource-4.2.2-mingw.exe,安裝后與linux下一樣,要配置、編譯后才能使用。,7,配置windows運行環(huán)境。打開命令行:cmd c:set QTDIR=g:Qt3293501.1NO /指定Qt目錄 c:set MINGW=G:MinGW /編譯路徑 c:set PATH=g:Qt3293501.1NObin;G:QtBorlandBCC55Bin /指定Qt可執(zhí)行文件路徑 c:set QMAKESPEC =win3

6、2-borland /指定編譯器,8,特別提示:在做TCP/IP協(xié)議開發(fā)時,用qmake生成.pro文件后,要在Q文件中加入“QT+=network”語句才能編譯通過。 另外在windows下運行qt的.exe文件時,先要將qt庫中的.dll動態(tài)鏈接文件copy到windows的系統(tǒng)文件syste32下,確保執(zhí)行.exe文件可以正確的連接到qt庫。 Qt3 for windows是用Borland編譯的! 現(xiàn)場演示windows下的Qt使用(分別有Qt4和Qt3)。,9,(2)Linux下的Qt 安裝源代碼可以在ftp:/ for x11安裝要點(以qt3.3.5為例)

7、。 解壓: #cd /usr/local #gunzip qt-x11-version.tar.gz # 對這個包進行解壓速 #tar xf qt-x11-version.tar # 對這個包進行解包 設置環(huán)境變量: # export QTDIR=/usr/local/qt # export PATH=$QTDIR/bin:$PATH # export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH,10,執(zhí)行腳本: ./configure -shared debug thread qt-gif qt-imgfmt-jpeg qt-imgfmt-mng

8、/注意,這些參數(shù)的配置直接決定了Qt的一些功能。如-shared是生成動態(tài)鏈接庫、thread是支持多線程、debug是加入調(diào)試功能等,可以通過config命令來查看可選參數(shù)項。 執(zhí)行g(shù)make 編譯Qt庫及生成可執(zhí)行程序,如designer、qmake、moc等工具。 在正常情況下需要40分鐘,編譯成功后提示: Enjoy! the Trolltech team 完成,可正常使用。,11, for ARM安裝要點(以qte3.3.6為例)。 與前面的設置幾乎一樣,需要注意的是在同一Linux系統(tǒng)下安裝for x11和for ARM版本時,要將qte3.3.6運行變量設置為QTEDIR,在使用

9、qmake生成Makefile后,修改Makefile內(nèi)容,將其編譯路徑、鏈接庫改為與QTEDIR對應的,以避免與qt3.3.5相互沖突。 注意配置參數(shù)選項中,加入 qvfb depths 4, 8 ,16 ,32,指定嵌入式開發(fā)包生成虛擬緩沖幀工具qvfb,并支持4,8,16,32位的顯示顏色深度。 加入 xplatform linux-arm-g+,指定其編譯程序時使用的是for arm的linux-arm-g+編譯器,否則無法正常編譯。,12,(3)Qt在的使用。 qt在xp和linux平臺的使用方式大概相同,主要有兩種qt程序設計方式。 使用designer設計器 designer設計

10、器是qt自帶的,在Qt編譯好之后就會自動生成這個設計器,它是用來設計和實現(xiàn)用戶界面并能夠在多平臺下使用的一種工具。,13,14,這個工具設計qt界面可以生成一個.ui文件,保存界面設計的相關(guān)信息。在成功生成.ui文件后,必須編寫main.cpp文件,指定程序編譯入口并鏈接.ui文件,最后 #qmake project /生成項目文件*.pro #qmake o Makefile *.pro /生成Makefile文件 #make /編譯,15,使用純文本工具。 qt designer實際上是將.ui界面的相信生成.cpp文件,然后與mian()函數(shù)鏈接。因此,可以用文本工具直接生成.cpp文件

11、,并寫好相關(guān)的.h文件。最后與上面的方法一樣,生成文件*.pro、Makefile并編譯。 兩種方法的比較:,16,第二章 QtE網(wǎng)絡編程,一、TCP與UDP協(xié)議 TCP/IP協(xié)議將經(jīng)典的OSI7協(xié)議模型簡化為4層:應用層、傳輸層、網(wǎng)絡層和網(wǎng)絡接口層。傳輸層有TCP和UDP協(xié)議,TCP是面向鏈接的,鏈接需要三方握手,超時和錯誤有重發(fā)機制,通信可靠性高;UDP是無連接的,無需三方握手,沒有client和sever之分,網(wǎng)絡負荷小。,17,二、QtE下的網(wǎng)絡模型。,18,在linux中的網(wǎng)絡編程是通過socket接口來進行的。在QtE環(huán)境里,對socket進行了封裝,并建立了相應的QSocket,

12、 QServerSocket, QDns, QFtp類。 Cient端 QSocket類提供了一個有緩沖的TCP連接,在這個類中,可以調(diào)用的connectToHost()、bytesAvailable()、canReadLine()這些函數(shù)。connectToHost()是一個最常用的函數(shù),打開一個被命名的主機的連接。當connectToHost()已經(jīng)完成它的DNS查找并且正在開始它的TCP連接時,hostFound()被發(fā)射。 當有進入的數(shù)據(jù)可以被讀取時,readyRead ()這個信號被發(fā)射,可以用它來鏈接其他的一些動作槽,完成響應。,19,Server端的建立 QServerSocke

13、t是一個基于TCP/IP的服務器類,它能建立服務器監(jiān)聽狀態(tài),當有監(jiān)聽到請求后,就會建立其一個處理連接的socket來,因此,在服務器端,需要同時使用QSocket, QServerSocket類。 特別注意的:void newConnection ( intsocket ),20,三、實例-QtE下是如何建立Client與Server的連接的 (1)信號和槽機制 信號和槽用于對象間的通訊。信號/槽機制是Qt的一個中心特征并且也許是Qt與其它工具包的最不相同的部分。較老的工具包使用一種被稱作回調(diào)的通訊方式來實現(xiàn)同一目的。在Qt中我們有一種可以替代回調(diào)的技術(shù)。我們使用信號和槽。當一個特定事件發(fā)生的

14、時候,一個信號被發(fā)射。,21,22,(2)QtE網(wǎng)絡通信中的信號與槽 Server端主要鏈接 連接部分: connect( this, SIGNAL(readyRead(), SLOT(readClient() ); connect( this, SIGNAL(connectionClosed(), SLOT(connectionClosed() ); connect( server, SIGNAL(newConnect(), SLOT(newConnect() ); connect( quit, SIGNAL(clicked(), qApp, SLOT(quit() ); 槽private

15、slots: void newConnect() infoText-append( New connectionn ); 主函數(shù)int main( int argc, char* argv ) QApplication app( argc, argv ); ServerInfo info; app.setMainWidget( ,23,Client端 socket = new QSocket( this ); socket-connectToHost( host, port ); connect( socket, SIGNAL(connected(), SLOT(socketConnected

16、() ); connect( socket, SIGNAL(connectionClosed(), SLOT(socketConnectionClosed() ); connect( socket, SIGNAL(readyRead(), SLOT(socketReadyRead() ); connect( socket, SIGNAL(error(int), SLOT(socketError(int) );,24,第三章 QtE中的幾個關(guān)鍵技術(shù),第三章 QtE中的幾個關(guān)鍵技術(shù) 一、qt與SQLite鏈接 SQLite是一個小型的C程序庫,實現(xiàn)了獨立的,可嵌入的,零配置的SQL數(shù)據(jù)庫引擎。SQ

17、Lite發(fā)行版包含一個獨立的命令行訪問程序(sqlite),可用于管理SQLite數(shù)據(jù)庫, 進入了sqlite3之后,會看到以下文字: SQLite version 3.1.3 Enter .help for instructions sqlite 然后可以進行查詢、插入,刪除,導出數(shù)據(jù)等操作。具體見,25,在sqite表格建立好之后,如何將qt與sqlite連接,用qt的界面直接操作sqlite。 存在的問題: qt是基于c+的,而sqlite是c語言編寫的,不能很好的兼容。 在qt4以前并沒有qt類以提供訪問sqlite的API接口 如何解決: 在這種情況下,我么只有直接建立一個類CDat

18、abase,這個類里定義了一個名字空間dbiplus,然后在該名字空間下定義一個數(shù)據(jù)庫指針* mpDatabase,利用指針來訪問sqlite數(shù)據(jù)庫。,26,具體如下: using namespace dbiplus; void readSensorDataFromDB(); /Read data dbiplus:SqliteDatabase* mpDatabase; dbiplus:Dataset* mpDataset; /實現(xiàn)cpp * /init database mpDatabase = new dbiplus:SqliteDatabase( ); mpDatabase-setDatabase( allen.db ); mpDataset = mpDatabase-CreateDataset( ); mpDatabase-connect(); /read data readSensorDataFromDB();,27,二、Qt中的多線程及刷屏技術(shù) 1、多線程 (1)多

溫馨提示

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

評論

0/150

提交評論