您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于TCPIP协议的QtE网络编程
1刘学钢基于TCP/IP协议的QtE网络编程2内容概要→QtE的网络编程演示→讲解主要内容:一、嵌入式GUI介绍主要解决问题:为何选用Qt及如何使用Qt。二、QtE的网络编程主要解决问题:如何使用QtE实现网络编程,比较QtE下的几种网络协议,并通过实例阐述QtE实现网络编程要点。三、QtE中的几个关键技术主要解决问题:阐述如何链接SQLite数据库、多线程的必要性及其设计方法以及Qt中的刷屏技术。四、工作中出现的一些问题及后续工作展望主要解决问题:阐述设计过程中的遇到的一些实际问题及解决方法和一些有待于解决的问题。3第一章嵌入式GUI介绍一、几种嵌入式GUI1、MicroWindowsCentury软件公司维护的,较早出现的开放源代码的嵌入式GUI特点:(1)主要特色:提供较为完善的图形功能,支持多种外部设备输入,包括LCD、鼠标和键盘等。(2)核心是基于显示设备接口的,绝大部分使用C语言开发的,移植性很强。(3)主要在linux、wince等操作系统上运行。42、MiniGUI我国为数不多的在国际比较知名的自由软件之一,早期有魏永明先生和许多志愿者开发,现在有北京飞漫公司()进行维护和商业运作。特点:(1)主要特色:轻量级的图形界面,MiniGUI代码都采用c语言开发,提供完备的多窗口机制和消息传递机制。(2)完善的多字符集支持,提供中韩日等多输入字体。(3)提供MiniGUI-Threads、MiniGUI-Lite、MiniGUI-standone三种不同架构版本以满足不同的嵌入式OS。(4)提供丰富的应用软件53、Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包,挪威Trolltech公司产品。1995年正式发行第一个版本Qt0.9。Linux桌面系统的KDE就是基于Qt库开发的,Qt与linux操作系统的兼容性最好。特点:(1)主要特色:支持多种平台,移植时只需重新编译代码而不需要对代码进行修改。(2)模块化,可剪裁,极其适合嵌入式系统的“小而快”的要求。(3)用C++编写,为开发者提供清晰的框架。(4)Forfree版本代码完全开放。()61、Qt的在多种操作系统平台下安装(1)Windows下的QtQt从3.0版本开始,在Windows下的功能日趋强大,可以很方便的在Windows平台下安装、编译、调试、运行。下面以Qt4.2.2在windowsxpOS下的安装为例,阐述安装注意事项①首先安装MinGW。MinGW是指之用自由软件来生成纯粹的Win32可执行文件,它是MinnimalistGUNonwindows的缩写。MinGW是一些头文件和端口库的集合,允许开发者在没有第三方动态链接库情况下使用GCC产生Windows32程序,它并不是只是c/c++编译器,而是GUN工具合集。在这里我们用它专门来编译Qt源代码以生成.exe可执行文件。②安装qt-win-opensource-4.2.2-mingw.exe,安装后与linux下一样,要配置、编译后才能使用。7③配置windows运行环境。打开命令行:cmdc:\setQTDIR=g:\Qt\329350~1.1NO//指定Qt目录c:\setMINGW=G:\MinGW//编译路径c:\setPATH=g:\Qt\329350~1.1NO\bin;G:\Qt\Borland\BCC55\Bin//指定Qt可执行文件路径c:\setQMAKESPEC=win32-borland//指定编译器8④特别提示:在做TCP/IP协议开发时,用qmake生成.pro文件后,要在Qt-source.pro文件中加入“QT+=network”语句才能编译通过。另外在windows下运行qt的.exe文件时,先要将qt库中的.dll动态链接文件copy到windows的系统文件syste32下,确保执行.exe文件可以正确的连接到qt库。Qt3forwindows是用Borland编译的!⑤现场演示windows下的Qt使用(分别有Qt4和Qt3)。。。9(2)Linux下的Qt安装源代码可以在上下载①forx11安装要点(以qt3.3.5为例)。解压:#cd/usr/local#gunzipqt-x11-version.tar.gz#对这个包进行解压速#tarxfqt-x11-version.tar#对这个包进行解包设置环境变量:#exportQTDIR=/usr/local/qt#exportPATH=$QTDIR/bin:$PATH#exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH10执行脚本:./configure-shared–debug–thread–qt-gif–qt-imgfmt-jpeg–qt-imgfmt-mng//注意,这些参数的配置直接决定了Qt的一些功能。如-shared是生成动态链接库、–thread是支持多线程、–debug是加入调试功能等,可以通过config命令来查看可选参数项。执行gmake编译Qt库及生成可执行程序,如designer、qmake、moc等工具。在正常情况下需要40分钟,编译成功后提示:Enjoy!–theTrolltechteam完成,可正常使用。11②forARM安装要点(以qte3.3.6为例)。与前面的设置几乎一样,需要注意的是在同一Linux系统下安装forx11和forARM版本时,要将qte3.3.6运行变量设置为QTEDIR,在使用qmake生成Makefile后,修改Makefile内容,将其编译路径、链接库改为与QTEDIR对应的,以避免与qt3.3.5相互冲突。注意配置参数选项中,加入–qvfb–depths4,8,16,32,指定嵌入式开发包生成虚拟缓冲帧工具qvfb,并支持4,8,16,32位的显示颜色深度。加入–xplatformlinux-arm-g++,指定其编译程序时使用的是forarm的linux-arm-g++编译器,否则无法正常编译。12(3)Qt在的使用。qt在xp和linux平台的使用方式大概相同,主要有两种qt程序设计方式。①使用designer设计器designer设计器是qt自带的,在Qt编译好之后就会自动生成这个设计器,它是用来设计和实现用户界面并能够在多平台下使用的一种工具。1314这个工具设计qt界面可以生成一个.ui文件,保存界面设计的相关信息。在成功生成.ui文件后,必须编写main.cpp文件,指定程序编译入口并链接.ui文件,最后#qmake–project//生成项目文件***.pro#qmake–oMakefile***.pro//生成Makefile文件#make//编译15②使用纯文本工具。qtdesigner实际上是将.ui界面的相信生成.cpp文件,然后与mian()函数链接。因此,可以用文本工具直接生成.cpp文件,并写好相关的.h文件。最后与上面的方法一样,生成文件***.pro、Makefile并编译。两种方法的比较:16第二章QtE网络编程一、TCP与UDP协议TCP/IP协议将经典的OSI7协议模型简化为4层:应用层、传输层、网络层和网络接口层。传输层有TCP和UDP协议,TCP是面向链接的,链接需要三方握手,超时和错误有重发机制,通信可靠性高;UDP是无连接的,无需三方握手,没有client和sever之分,网络负荷小。17二、QtE下的网络模型。18在linux中的网络编程是通过socket接口来进行的。在QtE环境里,对socket进行了封装,并建立了相应的QSocket,QServerSocket,QDns,QFtp类。①Cient端QSocket类提供了一个有缓冲的TCP连接,在这个类中,可以调用的connectToHost()、bytesAvailable()、canReadLine()这些函数。connectToHost()是一个最常用的函数,打开一个被命名的主机的连接。当connectToHost()已经完成它的DNS查找并且正在开始它的TCP连接时,hostFound()被发射。当有进入的数据可以被读取时,readyRead()这个信号被发射,可以用它来链接其他的一些动作槽,完成响应。19②Server端的建立QServerSocket是一个基于TCP/IP的服务器类,它能建立服务器监听状态,当有监听到请求后,就会建立其一个处理连接的socket来,因此,在服务器端,需要同时使用QSocket,QServerSocket类。特别注意的:voidnewConnection(intsocket)20三、实例----QtE下是如何建立Client与Server的连接的(1)信号和槽机制信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。较老的工具包使用一种被称作回调的通讯方式来实现同一目的。在Qt中我们有一种可以替代回调的技术。我们使用信号和槽。当一个特定事件发生的时候,一个信号被发射。2122(2)QtE网络通信中的信号与槽①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()));槽privateslots:voidnewConnect(){infoText-append(Newconnection\n);}主函数intmain(intargc,char**argv){QApplicationapp(argc,argv);ServerInfoinfo;app.setMainWidget(&info);info.show();returnapp.exec();}23②Client端socket=newQSocket(this);socket-connectToHost(host,port);connect(socket,SIGNAL(connected()),SLOT(socketConnected()));connect(socket,SIGNAL(connectionClosed()),SLOT(socketConnectionClosed()));connect(socket,SIGNAL(readyRead()),SLOT(socketReadyRead()));connect(socket,SIGNAL(error(int)),SLOT(socketError(int)));24第三章QtE中的几个关键技术第三章QtE中的几个关键技术一、qt与SQLite链接SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。SQLite发行版包含一个独立的命令行访问程序(sqlite),可用于管理SQLite数据库,进入了sqlite3之后,会看到以下文字:SQLiteversion3.1.3Enter.helpforinstructionssqlite然后可以进行查询、插入,删除,导出数据等操作。具体见,不再讲述。25在sqite表格建立好之后,如何将qt与sqlite连接,用qt的界面直接操作sqlite。存在的问题:①qt是基于c++的,而sqlite是c语言编写的,不能很好的兼容。②在qt4以前并没有qt类以提供访问sqlite的API接口如何
本文标题:基于TCPIP协议的QtE网络编程
链接地址:https://www.777doc.com/doc-2572346 .html