基于QT局域網(wǎng)聊天系統(tǒng)畢業(yè)論文(設(shè)計(jì))_第1頁
基于QT局域網(wǎng)聊天系統(tǒng)畢業(yè)論文(設(shè)計(jì))_第2頁
基于QT局域網(wǎng)聊天系統(tǒng)畢業(yè)論文(設(shè)計(jì))_第3頁
基于QT局域網(wǎng)聊天系統(tǒng)畢業(yè)論文(設(shè)計(jì))_第4頁
基于QT局域網(wǎng)聊天系統(tǒng)畢業(yè)論文(設(shè)計(jì))_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、華東交通大學(xué)理工學(xué)院institute of technology. east china jiaotong university 畢 業(yè) 設(shè) 計(jì)(論 文) graduation design (thesis)(20 20 年)題 目: 基于qt的網(wǎng)絡(luò)聊天系統(tǒng)設(shè)計(jì) 分 院: 電氣與信息工程分院 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 計(jì)科2009-2 學(xué) 號(hào): 20090210440226 學(xué)生姓名: 指導(dǎo)教師: 起訖日期: 2012.122013.5 華東交通大學(xué)理工學(xué)院畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性申明本人鄭重申明:所呈交的畢業(yè)設(shè)計(jì)(論文)是本人在導(dǎo)師指導(dǎo)下獨(dú)立進(jìn)行的研究工作所取得的研究成果。設(shè)計(jì)(

2、論文)中引用他人的文獻(xiàn)、數(shù)據(jù)、圖件、資料,均已在設(shè)計(jì)(論文)中特別加以標(biāo)注引用,除此之外,本設(shè)計(jì)(論文)不含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫的成果作品。對(duì)本文的研究作出重要貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式表明。本人完全意識(shí)到本申明的法律后果由本人承擔(dān)。畢業(yè)設(shè)計(jì)(論文)作者簽名: 日期: 年 月 日畢業(yè)設(shè)計(jì)(論文)版權(quán)使用授權(quán)書本畢業(yè)設(shè)計(jì)(論文)作者完全了解學(xué)院有關(guān)保留、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,同意學(xué)校保留并向國家有關(guān)部門或機(jī)構(gòu)送交設(shè)計(jì)(論文)的復(fù)印件和電子版,允許設(shè)計(jì)(論文)被查閱和借閱。本人授權(quán)華東交通大學(xué)理工學(xué)院可以將本設(shè)計(jì)(論文)的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用

3、影印、縮印或掃描等復(fù)制手段保存和匯編畢業(yè)設(shè)計(jì)(論文)。(保密的畢業(yè)設(shè)計(jì)(論文)在解密后適用本授權(quán)書) 畢業(yè)設(shè)計(jì)(論文)作者簽名: 指導(dǎo)教師簽名:簽字日期: 年 月 日 簽字日期: 年 月 日摘 要越來越多的嵌入式終端需要一個(gè)圖形化的接口界面,良好的人機(jī)交互界面是嵌入式系統(tǒng)設(shè)計(jì)的一個(gè)關(guān)鍵技術(shù)。特別是嵌入式的手持設(shè)備,比如手機(jī),筆記本電腦等。它對(duì)于嵌入式的實(shí)用性,美觀性,和娛樂性都提供了極大地幫助,隨著科學(xué)技術(shù)的高速發(fā)展,移動(dòng)手持設(shè)備的網(wǎng)絡(luò)功能已經(jīng)非常成熟了,人們對(duì)手持設(shè)備網(wǎng)絡(luò)軟件的需求也日益增加,開發(fā)基于嵌入式終端的網(wǎng)絡(luò)聊天系統(tǒng)軟件具有很大的使用意義和價(jià)值。本文的目標(biāo)是實(shí)現(xiàn)基于qt的網(wǎng)絡(luò)聊天系統(tǒng)

4、設(shè)計(jì),論文開始接受了linux的優(yōu)點(diǎn)和qt用于開發(fā)嵌入式圖形界面的優(yōu)點(diǎn),著重分析了qt在軟件開發(fā)中的編程機(jī)制。并根據(jù)嵌入式應(yīng)用的特點(diǎn)對(duì)嵌入式終端下的網(wǎng)絡(luò)聊天系統(tǒng)進(jìn)行了需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì)。最后對(duì)關(guān)于論文的進(jìn)一步的改進(jìn)方向進(jìn)行了簡要的分析。 本文討論的內(nèi)容采用qt軟件進(jìn)行圖形界面設(shè)計(jì),利用軟件自帶的庫,實(shí)現(xiàn)軟件界面的設(shè)計(jì), 本次研究實(shí)現(xiàn)類似于qq的網(wǎng)絡(luò)聊天方式,多個(gè)客戶端可同時(shí)登陸服務(wù)器,并且客戶端之間可進(jìn)行通信。關(guān)鍵詞:嵌入式;qt;網(wǎng)絡(luò)聊天abstract 目 錄中文摘要英文摘要目錄引言第一章 linux和qt的簡介第二章 軟件需求分析第三章 網(wǎng)絡(luò)聊天系統(tǒng)的概要設(shè)計(jì)第四章 網(wǎng)絡(luò)聊天系

5、統(tǒng)的詳細(xì)設(shè)計(jì)第五章 系統(tǒng)測(cè)試第六章 系統(tǒng)運(yùn)行和維護(hù)第七章 結(jié)語第八章 參考文獻(xiàn)第九章 附錄第十章 后記引 言 隨著嵌入式產(chǎn)品的高速發(fā)展,大多數(shù)嵌入式操作系統(tǒng)擁有網(wǎng)絡(luò)和圖形界面的工程。利用源代碼開發(fā)的linux搭建的嵌入式操作系統(tǒng),擁有l(wèi)inux具有開源,完全免費(fèi),和其強(qiáng)大的網(wǎng)絡(luò)功能,越來越多的嵌入式產(chǎn)品都采用linux操作系統(tǒng)。它能提供全功能的桌面計(jì)算,并且支持大多數(shù)嵌入式操作系統(tǒng)上使用的芯片,包括arm,power 和等。在嵌入式上使用輕量級(jí),高性能,高可靠,可配置的系統(tǒng)成為可行的解決方案。 雖然市場(chǎng)上出現(xiàn)了許多優(yōu)秀的圖形界面可發(fā)軟件,但是隨著計(jì)算機(jī)技術(shù)的高速發(fā)展,當(dāng)新硬件,新技術(shù)出現(xiàn)時(shí),計(jì)

6、算機(jī)的體系結(jié)構(gòu), ,指令系統(tǒng),和操作系統(tǒng)都可能發(fā)生相應(yīng)的變化,這勢(shì)必會(huì)導(dǎo)致一部分應(yīng)用軟件在新的平臺(tái)上無法運(yùn)行,可移植性不行,但是基于跨平臺(tái)的特點(diǎn),它能解決這個(gè)問題,極大地提高了應(yīng)用程序的可移植性。 因此,利用linux做基于qt的嵌入式聊天系統(tǒng)的開發(fā)是一個(gè)非常有意義的課題,具有非常重要的研究和商業(yè)價(jià)值。第一章 linux和qt的簡介1.1 linux的主要特性(1)符合posix1003.1標(biāo)準(zhǔn)posix1003.1標(biāo)準(zhǔn)定義了一個(gè)最小的unix操作系統(tǒng)接口,任何操作系統(tǒng)只有符合這一標(biāo)準(zhǔn)才能運(yùn)

7、行unix程序。(2)支持多用戶訪問和多任務(wù)編程linux是一個(gè)多用戶操作系統(tǒng),它允許多個(gè)用戶同時(shí)訪問系統(tǒng)而不會(huì)造成用戶之間的干擾。另外,linux還支持多用戶編程,一個(gè)用戶可以創(chuàng)建多個(gè)進(jìn)程,并使它們協(xié)同工作以完成用戶的需求。(3)采用頁式存儲(chǔ)管理頁式管理使linux能更有效的利用物理存儲(chǔ)空間,頁面的換入換出為用戶提供更大的存儲(chǔ)空間。(4)支持動(dòng)態(tài)鏈接用戶的程序的執(zhí)行往往離不開標(biāo)準(zhǔn)庫的支持,多數(shù)操作系統(tǒng)一般采用靜態(tài)鏈接方式-即在編譯階段就把用戶程序和標(biāo)準(zhǔn)庫鏈接好,這樣當(dāng)用多個(gè)進(jìn)程運(yùn)行時(shí),可能會(huì)造成庫代碼在內(nèi)存中有多個(gè)副本而浪費(fèi)空間。而linux支持動(dòng)態(tài)鏈接方式-即用戶程序在運(yùn)行階段才把庫鏈接進(jìn)

8、來,這樣就能保證庫代碼在內(nèi)存中時(shí)唯一的,可以節(jié)省內(nèi)存空間。(5)支持多文件系統(tǒng)linux支持多文件系統(tǒng),目前支持的文件系統(tǒng)有:ext2,ext3,xiafs,isof,msdos,umsdos,proc,nfs,sysv,minix,smb,ufs,ncp,vfat等。linux最常用的文件系統(tǒng)是ext2,它的文件名程度可達(dá)255個(gè)字節(jié)。(6)支持tcp/ip,slip和ppp協(xié)議在linux中用戶可以使用所有的網(wǎng)絡(luò)服務(wù),如nfs,telnet等。slip和ppp能支持串行線上的tcp/ip協(xié)議的使用,這意味著用戶可用一個(gè)高速的調(diào)制解調(diào)器(modem)通過電話線連入internet網(wǎng)中。1.2

9、 qt的主要特性qt是一個(gè)跨平臺(tái)的c+ gui應(yīng)用構(gòu)架,它提供了豐富的窗口部件集,具有面向?qū)ο?、易于擴(kuò)展、真正的組建編程等特點(diǎn),更引人注目的是目前l(fā)inux上最流行的kde桌面環(huán)境就是建立在qt庫的基礎(chǔ)上的。qt支持一下平臺(tái):ms/windows-95、98、nt 和 2000;unix/x11-linux、sun solaris、hp-ux、digital unix、ibm aix、sgi irix;embedded- 支持 framebuffer 的 linux 平臺(tái).信號(hào)和槽機(jī)制是qt編程的核心機(jī)制。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是qt的核心機(jī)制也是qt區(qū)別于其它工具包

10、的重要地方。qt具有跨桌面和嵌入式操作系統(tǒng)的移植性。使用 qt只需一次性開發(fā)應(yīng)用程序,就可跨不同桌面和嵌入式操作系統(tǒng)進(jìn)行部署,而無須重新編寫源代碼。具有跨平臺(tái) ide的集成開發(fā)工具:qt creator 是專為滿足 qt 開發(fā)人員需求而量身定制的跨平臺(tái)集成開發(fā)環(huán)境 (ide)。qt creator 可在 windows、linux/x11 和 mac os x 桌面操作系統(tǒng)上運(yùn)行,供開發(fā)人員針對(duì)多個(gè)桌面和移動(dòng)設(shè)備平臺(tái)創(chuàng)建應(yīng)用程序。第二章 軟件需求分析2.1 系統(tǒng)客戶要求需求分析是軟件開發(fā)中的一個(gè)重要步驟,它的基本任務(wù)就是要準(zhǔn)確地分析出系統(tǒng)應(yīng)用者的需要,以及系統(tǒng)目標(biāo)必須具備哪些工程,這些工程必須

11、準(zhǔn)確的體現(xiàn)出用戶的要求。 根據(jù)網(wǎng)絡(luò)聊天系統(tǒng)的特點(diǎn),它應(yīng)該能實(shí)現(xiàn)即時(shí)通訊的功能??蛻舳撕头?wù)器應(yīng)該具有不同的功能,其中服務(wù)器的主要工程就是管理客戶端的登陸信息,包括賬號(hào)、密碼、在線狀況、昵稱等,而客戶端的主要功能就是實(shí)現(xiàn)能夠連接服務(wù)器,注冊(cè)用戶,登陸服務(wù)器,并且能實(shí)現(xiàn)客戶端之間的通信。并隨時(shí)更新用戶的信息。2.2 網(wǎng)絡(luò)聊天系統(tǒng)架構(gòu)分析簡介 網(wǎng)絡(luò)聊天系統(tǒng)分為客戶端和服務(wù)器兩部分,其中服務(wù)器運(yùn)行在pc機(jī)上,客戶端可運(yùn)行在開發(fā)板上,亦可運(yùn)行在pc機(jī)上。首先服務(wù)器開始監(jiān)聽,然后客戶端通過注冊(cè),登陸服務(wù)器,然后客戶端之間即可進(jìn)行通信。2.3 網(wǎng)絡(luò)聊天系統(tǒng)界面設(shè)計(jì)(1)服務(wù)器界面如圖1所示;服務(wù)器提供了所有

12、注冊(cè)了的用戶的用戶名,密碼,昵稱和登錄狀態(tài)信息,方便對(duì)用戶信息進(jìn)行管理。(2)客戶端登錄模塊界面顯示如圖2所示;客戶端登錄模塊類似于qq的登陸界面,只是它多了連接服務(wù)器的ip地址和端口號(hào)。(3)客戶端注冊(cè)模塊界面顯示如圖3所示;客戶端注冊(cè)模塊可以讓新用戶注冊(cè)信息。(4)客戶端好友列表界面顯示如圖4所示;好友列表模塊顯示用戶好友和自己的用戶名和登陸狀態(tài)。(5)客戶端聊天界面如圖5所示;客戶端聊天模塊可以讓用戶與其他用戶通信。圖1 服務(wù)器主界面圖2 客戶端登錄模塊主界面圖3 注冊(cè)模塊界面圖4 好友列表界面圖5 聊天界面2.4 網(wǎng)絡(luò)聊天系統(tǒng)架構(gòu)圖2.4.1 服務(wù)器架構(gòu)圖服務(wù)器結(jié)構(gòu)圖如圖6所示:圖6

13、服務(wù)器結(jié)構(gòu)圖2.4.2 客戶端架構(gòu)圖客戶端結(jié)構(gòu)圖如圖7所示:圖7 客戶端結(jié)構(gòu)圖2.5 系統(tǒng)開發(fā)目標(biāo) (1) 實(shí)現(xiàn)好友登陸,當(dāng)好友登陸或離開時(shí),服務(wù)器能即時(shí)通知所有的在線用戶。 (2) 收發(fā)信息同步,當(dāng)一個(gè)用戶想其他的好友發(fā)送消息是,相應(yīng)的用戶能即時(shí)接受消息。2.6 開發(fā)環(huán)境軟件環(huán)境:ubuntu10.11硬件環(huán)境:1gb以上的cpu,500mb以上的內(nèi)存第3章 網(wǎng)絡(luò)聊天系統(tǒng)的概要設(shè)計(jì) 根據(jù)調(diào)查和研究,得到系統(tǒng)所要處理的數(shù)據(jù)流程如圖8所示:圖8 網(wǎng)絡(luò)聊天系統(tǒng)數(shù)據(jù)流程圖3.1服務(wù)器的具體實(shí)現(xiàn)(1)解決中文亂碼的關(guān)鍵代碼:qtextcodec:setcodecforcstrings(qtextcod

14、ec:codecforname(utf-8);qtextcodec:setcodecforlocale(qtextcodec:codecforname(utf-8);qtextcodec:setcodecfortr(qtextcodec:codecforname(utf-8);其頭文件為#include .(2)使用數(shù)據(jù)庫保持用戶信息,需要用到如下庫:#include #include 其中qsqldatabase庫代表一個(gè)數(shù)據(jù)庫的連接,qsqlquery提供了執(zhí)行sql命令的方法。使用方式如下:qsqlquery query;query.exec(“drop table scooter”);

15、 數(shù)據(jù)庫的操作還涉及到庫 qsqltablemodle,該類為單一的數(shù)據(jù)庫表提供了可編輯的模型。使用方法如下:model = new qsqltablemodle(this);modle-settable(“scooter”);model-setsort(scooter_name,qt:ascendingorder);model-select();(3)打開和關(guān)閉監(jiān)聽的關(guān)鍵技術(shù):當(dāng)要用qstring類型的變量保持ip地址和端口號(hào)信息時(shí),可使用方法trimmed(),它可以去除最前面和最后面多輸入的空格。可以使用qmessagebox類來給出提示信息,例如:qmessagebox:critica

16、l(null,tr(“warnning”),tr(“error!”));(4)使用udp協(xié)議來通信使用方法如下: 添加頭文件#include udpsocket = new qudpsocket(this);if(!udpsocket-bind(qhostaddress(ip),(quint16)port+1)qmessagebox:critical(null,”warnning”,”error!”);connect(udpsocket,signal(readyread(),this,slot(recvmsg();3.2 客戶端的具體實(shí)現(xiàn) 客戶端主要有4個(gè)大模塊界面:登陸模塊,注冊(cè)模塊,好友列

17、表模塊,通信模塊。下面對(duì)這4個(gè)模塊分別進(jìn)行概要的分析。3.2.1 登陸模塊可以使用resize方法來設(shè)置窗口的大小,從而實(shí)現(xiàn)顯示部分窗口的功能,具體使用如下:this-resize(366,231);在登陸模塊還有如下關(guān)鍵代碼:socket-abort();socket-connecttohost(qhostaddress(ip),(quint16)port.toint();connect(socket,signal(readyread(),this,slot(recvmsg();其中abort()方法用來關(guān)閉套接字,并且重新設(shè)置套接字。3.2.2 注冊(cè)模塊注冊(cè)模塊主要使用的關(guān)鍵技術(shù)是正則表達(dá)

18、式,頭文件是#include 使用方式如下:qregexp rx(“1-9/1,20-94,7$”);表示前面1到2個(gè)是1-9中的某個(gè)數(shù),后面跟著的是4到7個(gè)0到9的數(shù)字。其中表示鎖定開頭,$表示鎖定結(jié)尾。具體使用如下:qregexp rx(“1-91,20-94,7”);rx.setpatternsyntax(qregexp:regexp);if(!rx.exactmatch(username)qmessagebox:warning(null,tr(“warning”),tr(“username error”);3.2.3 好友列表模塊 好友表面模塊主要是顯示好友上線信息,和好友列表,使用u

19、dp協(xié)議接受服務(wù)器帶來的信息。當(dāng)雙擊某好友用戶時(shí),機(jī)會(huì)彈出與相應(yīng)好友的對(duì)話框。具體實(shí)現(xiàn)將在詳細(xì)設(shè)計(jì)階段說明。3.2.4 通信模塊 通信模塊是使用udp協(xié)議進(jìn)行通信的,因?yàn)樗槐亟⑦B接。第四章 網(wǎng)絡(luò)聊天系統(tǒng)的詳細(xì)設(shè)計(jì)4.1 服務(wù)器模塊 服務(wù)器和客戶端通信既有通過tcp/ip協(xié)議,也有通過udp協(xié)議進(jìn)行通信的。其中用戶下線和用戶信息更新時(shí)使用udp協(xié)議,而用戶登錄,注冊(cè)時(shí)使用tcp協(xié)議,使用數(shù)據(jù)庫保持用戶信息。/server.cpp文件/#include server.h#include ui_server.h#include #include #include #include #includ

20、e #include #include #include #include server:server(qsqldatabase *db, qwidget *parent) : qmainwindow(parent), ui(new ui:server) ui-setupui(this); server = new qtcpserver(this); this-setwindowtitle(jy2012_qqserver); ui-pushbutton_2-settext(startlisten); ip.clear(); port.clear(); this-db = db; display

21、view();server:server() delete ui;/open listen or close listen/void server:on_pushbutton_2_clicked() ip.clear(); port.clear(); ip = ui-lineedit-text().trimmed();/去除最前面和最后面多余的空格 port = ui-lineedit_2-text().trimmed(); if(ui-pushbutton_2-text() = startlisten) if(!server-listen(qhostaddress(ip),(quint16)

22、port.touint() qmessagebox:critical( null, tr(warning), tr(listen error) ); else connect(server,signal(newconnection(),this,slot(newconnection(); udpsocket = new qudpsocket(this); if(!udpsocket-bind(qhostaddress(ip),(quint16)port.touint() + 1) qmessagebox:critical(null,tr(warning),tr(bind udpsocket e

23、rror).arg(udpsocket-errorstring(); connect(udpsocket,signal(readyread(),this,slot(readdatagrams(); ui-pushbutton_2-settext(stoplisten); ui-lineedit-setenabled(false); ui-lineedit_2-setenabled(false); else if(ui-pushbutton_2-text() = stoplisten) server-close(); ui-pushbutton_2-settext(startlisten); u

24、i-lineedit-setenabled(true); ui-lineedit_2-setenabled(true); void server:newconnection() qdebug() nextpendingconnection(); connect(socket,signal(readyread(),this,slot(recvmsg();void server:recvmsg() qbytearray block; block = socket-readall(); qdatastream in(&block,qiodevice:readonly); in.setversion(

25、qdatastream:qt_4_7); quint16 datagramsize; qstring msgtype; in datagramsize msgtype; qdebug() datagramsize * username passwd nickname; qdebug() username id passwd; qdebug() id,passwd id passwd; qsqlquery query; if(!(query.exec(select username,passwd from scooter) qmessagebox:critical(null, exec, exe

26、c failed.); return; while (query.next() if(query.value(0).tostring() = id & query.value(1).tostring() = passwd) qdebug() user login success; qsqlquery query2; query2.exec(update scooter set state=on where username=:username); query2.bindvalue(:username,id); if(!query2.exec() qmessagebox:critical(nul

27、l,error,exec failed(update scooter set state=on where username=:username); return; query2.exec(select username,nickname,state from scooter); while(query2.next() idlist.append(query2.value(0).tostring(); nicklist.append(query2.value(1).tostring(); statelist.append(query2.value(2).tostring(); qdebug()

28、 idlist nicklist statelist *; on_pushbutton_clicked();/刷新列表 qstring msgtype = update; qbytearray block; qdatastream out(&block,qiodevice:writeonly); out.setversion(qdatastream:qt_4_7); out (quint16)0 msgtype idlist nicklist seek(0); out write(block); /發(fā)送更新信息給所有的同一網(wǎng)段用戶 udpsocket-writedatagram(block.d

29、ata(),block.size(), qhostaddress:broadcast,6666); return; if(!query.next() qstring msgtype = login _failed; qbytearray block; qdatastream out(&block,qiodevice:writeonly); out.setversion(qdatastream:qt_4_7); out (quint16)0 seek(0); out write(block); return; bool server:opendb()qdebug() 111; qdebug()

30、setdatabasename(scooters.dat); qdebug() open() qdebug() lasterror().text(); return false; qdebug() 555; return true;int server:insertuser(qstring id, qstring passwd, qstring nickname,qstring state) qsqlquery query; if (!(query.exec(select username from scooter) qmessagebox:critical(null, exec, exec

31、failed.(select username from scooter); return -1; /this id already exist while (query.next() if ( query.value(0).tostring() = id) qdebug() user has existed; qstring msgtype = register_failed; qbytearray block; qdatastream out(&block,qiodevice:writeonly); out.setversion(qdatastream:qt_4_7); out (quin

32、t16)0 msgtype idlist nicklist seek(0); out write(block); return 0; /:表示在后面給定值 query.exec(insert into scooter (username,passwd,nickname,state) values (:username,:passwd,:nickname,:state); query.bindvalue(:username,id); query.bindvalue(:passwd,passwd); query.bindvalue(:name,nickname); query.bindvalue(

33、:state,state); if(!query.exec() qmessagebox:critical(null,error,exec failed.(insert into scooter (username,passwd,nickname,state).); return -1; displayview(); qstring msgtype = register_success; qbytearray block; qdatastream out(&block,qiodevice:writeonly); out.setversion(qdatastream:qt_4_7); out (q

34、uint16)0 seek(0); out write(block); return 1;void server:closedb() db-close();void server:displayview() model = new qsqltablemodel(this); model-settable(scooter); model-setsort(scooter_name, qt:ascendingorder); model-select(); ui-tableview-setmodel(model); ui-tableview-setselectionmode(qabstractitem

35、view:singleselection); ui-tableview-setselectionbehavior(qabstractitemview:selectrows); ui-tableview-setcolumnhidden(scooter_id, true); ui-tableview-resizecolumnstocontents(); ui-tableview-setedittriggers(qabstractitemview:noedittriggers); qheaderview *header = ui-tableview-horizontalheader(); heade

36、r-setstretchlastsection(true);void server:readdatagrams() qdebug() haspendingdatagrams() qbytearray block; block.resize(udpsocket-pendingdatagramsize(); if ( -1 = udpsocket-readdatagram(block.data(), block.size(), &senderip, &senderport) continue; processdatagram(block); void server:processdatagram(

37、qbytearray block) qdebug() datagramsize msgtype; qdebug() datagramsize *udp* myid mynick; qsqlquery query2; query2.exec(update scooter set state=off where username=:username); query2.bindvalue(:username,myid); if(!query2.exec() qmessagebox:critical(null,error,exec failed(update scooter set state=off

38、 where username=:username); return; query2.exec(select username,nickname,state from scooter); idlist.clear(); nicklist.clear(); statelist.clear(); while(query2.next() idlist.append(query2.value(0).tostring(); nicklist.append(query2.value(1).tostring(); statelist.append(query2.value(2).tostring(); qd

39、ebug() idlist nicklist statelist *; on_pushbutton_clicked(); qstring msgtype = update; qbytearray block; qdatastream out(&block,qiodevice:writeonly); out.setversion(qdatastream:qt_4_7); out (quint16)0 msgtype idlist nicklist seek(0); out writedatagram(block.data(),block.size(), qhostaddress:broadcast,6666); return; / update data /void server:on_pushbutton_clicked() delete model; displayview();/ close event /void server:closeevent(qcloseevent *event) qmessagebox:standardbutton button; button = qmessagebox:quest

溫馨提示

  • 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)論