版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,刘学钢,基于TCP/IP协议的QtE网络编程,2,内容概要, QtE的网络编程演示 讲解主要内容: 一、嵌入式GUI介绍 主要解决问题:为何选用Qt及如何使用Qt。 二、QtE的网络编程 主要解决问题:如何使用QtE实现网络编程,比较QtE下的几种网络协议,并通过实例阐述QtE实现网络编程要点。 三、QtE中的几个关键技术 主要解决问题:阐述如何链接SQLite数据库、多线程的必要性及其设计方法以及Qt中的刷屏技术。 四、工作中出现的一些问题及后续工作展望 主要解决问题:阐述设计过程中的遇到的一些实际问题及解决方法和一些有待于解决的问题。,3,第一章 嵌入式GUI介绍,一、几种嵌入式GUI
2、 1、 MicroWindows Century软件公司维护的,较早出现的开放源代码的嵌入式GUI 特点: (1)主要特色:提供较为完善的图形功能,支持多种外部设备输入,包括LCD、鼠标和键盘等。 (2)核心是基于显示设备接口的,绝大部分使用C语言开发的,移植性很强。 (3)主要在linux、wince等操作系统上运行。,4,2、MiniGUI 我国为数不多的在国际比较知名的自由软件之一,早期有魏永明先生和许多志愿者开发,现在有北京飞漫公司()进行维护和商业运作。 特点: (1)主要特色:轻量级的图形界面,MiniGUI代码都采用c语言开发,提供完备的多窗口机制和消息传递机制。 (2)完善的多
3、字符集支持,提供中韩日等多输入字体。 (3)提供MiniGUI-Threads、MiniGUI-Lite、MiniGUI-standone三种不同架构版本以满足不同的嵌入式OS。 (4)提供丰富的应用软件,5,3、Qt/Embedded(简称QtE) 是一个专门为嵌入式系统设计图形用户界面的工具包,挪威Trolltech公司产品。1995年正式发行第一个版本Qt0.9。Linux桌面系统的KDE就是基于Qt库开发的,Qt与linux操作系统的兼容性最好。 特点: (1)主要特色:支持多种平台,移植时只需重新编译代码而不需要对代码进行修改。 (2)模块化,可剪裁,极其适合嵌入式系统的“小而快”的
4、要求。 (3)用C+编写,为开发者提供清晰的框架。 (4)For free版本代码完全开放。(),6,1、Qt的在多种操作系统平台下安装 (1)Windows下的Qt Qt从3.0版本开始,在Windows下的功能日趋强大,可以很方便的在Windows平台下安装、编译、调试、运行。 下面以Qt4.2.2在windows xp OS下的安装为例,阐述安装注意事项 首先安装MinGW。MinGW是指之用自由软件来生成纯粹的Win32可执行文件,它是Minnimalist GUN on windows的缩写。MinGW是一些头文件和端口库的集合,允许开发者在没有第三方动态链接库情况下使用GCC产生W
5、indows32程序,它并不是只是c/c+编译器,而是GUN工具合集。在这里我们用它专门来编译Qt源代码以生成.exe可执行文件。 安装qt-win-opensource-4.2.2-mingw.exe,安装后与linux下一样,要配置、编译后才能使用。,7,配置windows运行环境。打开命令行:cmd c:set QTDIR=g:Qt3293501.1NO /指定Qt目录 c:set MINGW=G:MinGW /编译路径 c:set PATH=g:Qt3293501.1NObin;G:QtBorlandBCC55Bin /指定Qt可执行文件路径 c:set QMAKESPEC =win3
6、2-borland /指定编译器,8,特别提示:在做TCP/IP协议开发时,用qmake生成.pro文件后,要在Q文件中加入“QT+=network”语句才能编译通过。 另外在windows下运行qt的.exe文件时,先要将qt库中的.dll动态链接文件copy到windows的系统文件syste32下,确保执行.exe文件可以正确的连接到qt库。 Qt3 for windows是用Borland编译的! 现场演示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 # 对这个包进行解包 设置环境变量: # export QTDIR=/usr/local/qt # export PATH=$QTDIR/bin:$PATH # export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH,10,执行脚本: ./configure -shared debug thread qt-gif qt-imgfmt-jpeg qt-imgfmt-mng
8、/注意,这些参数的配置直接决定了Qt的一些功能。如-shared是生成动态链接库、thread是支持多线程、debug是加入调试功能等,可以通过config命令来查看可选参数项。 执行gmake 编译Qt库及生成可执行程序,如designer、qmake、moc等工具。 在正常情况下需要40分钟,编译成功后提示: Enjoy! the Trolltech team 完成,可正常使用。,11, for ARM安装要点(以qte3.3.6为例)。 与前面的设置几乎一样,需要注意的是在同一Linux系统下安装for x11和for ARM版本时,要将qte3.3.6运行变量设置为QTEDIR,在使用
9、qmake生成Makefile后,修改Makefile内容,将其编译路径、链接库改为与QTEDIR对应的,以避免与qt3.3.5相互冲突。 注意配置参数选项中,加入 qvfb depths 4, 8 ,16 ,32,指定嵌入式开发包生成虚拟缓冲帧工具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编译好之后就会自动生成这个设计器,它是用来设计和实现用户界面并能够在多平台下使用的一种工具。,13,14,这个工具设计qt界面可以生成一个.ui文件,保存界面设计的相关信息。在成功生成.ui文件后,必须编写main.cpp文件,指定程序编译入口并链接.ui文件,最后 #qmake project /生成项目文件*.pro #qmake o Makefile *.pro /生成Makefile文件 #make /编译,15,使用纯文本工具。 qt designer实际上是将.ui界面的相信生成.cpp文件,然后与mian()函数链接。因此,可以用文本工具直接生成.cpp文件
11、,并写好相关的.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,
12、 QServerSocket, QDns, QFtp类。 Cient端 QSocket类提供了一个有缓冲的TCP连接,在这个类中,可以调用的connectToHost()、bytesAvailable()、canReadLine()这些函数。connectToHost()是一个最常用的函数,打开一个被命名的主机的连接。当connectToHost()已经完成它的DNS查找并且正在开始它的TCP连接时,hostFound()被发射。 当有进入的数据可以被读取时,readyRead ()这个信号被发射,可以用它来链接其他的一些动作槽,完成响应。,19,Server端的建立 QServerSocke
13、t是一个基于TCP/IP的服务器类,它能建立服务器监听状态,当有监听到请求后,就会建立其一个处理连接的socket来,因此,在服务器端,需要同时使用QSocket, QServerSocket类。 特别注意的:void newConnection ( intsocket ),20,三、实例-QtE下是如何建立Client与Server的连接的 (1)信号和槽机制 信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。较老的工具包使用一种被称作回调的通讯方式来实现同一目的。在Qt中我们有一种可以替代回调的技术。我们使用信号和槽。当一个特定事件发生的
14、时候,一个信号被发射。,21,22,(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() ); 槽private
15、slots: void newConnect() infoText-append( New connectionn ); 主函数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中的几个关键技术,第三章 QtE中的几个关键技术 一、qt与SQLite链接 SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。SQ
17、Lite发行版包含一个独立的命令行访问程序(sqlite),可用于管理SQLite数据库, 进入了sqlite3之后,会看到以下文字: SQLite version 3.1.3 Enter .help for instructions sqlite 然后可以进行查询、插入,删除,导出数据等操作。具体见,25,在sqite表格建立好之后,如何将qt与sqlite连接,用qt的界面直接操作sqlite。 存在的问题: qt是基于c+的,而sqlite是c语言编写的,不能很好的兼容。 在qt4以前并没有qt类以提供访问sqlite的API接口 如何解决: 在这种情况下,我么只有直接建立一个类CDat
18、abase,这个类里定义了一个名字空间dbiplus,然后在该名字空间下定义一个数据库指针* mpDatabase,利用指针来访问sqlite数据库。,26,具体如下: using namespace dbiplus; void readSensorDataFromDB(); /Read data dbiplus:SqliteDatabase* mpDatabase; dbiplus:Dataset* mpDataset; /实现cpp * /init database mpDatabase = new dbiplus:SqliteDatabase( ); mpDatabase-setDatabase( allen.db ); mpDataset = mpDatabase-CreateDataset( ); mpDatabase-connect(); /read data readSensorDataFromDB();,27,二、Qt中的多线程及刷屏技术 1、多线程 (1)多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47212.3-2026家畜遗传资源保种场保种技术规范第3部分:牛
- 新能科技利用推动承诺书6篇
- 根治性肝癌肝叶切除术后护理查房
- 教育培训项目完成承诺书8篇
- 人力资源招聘流程与工具清单
- 项目交付质量控制模板系统
- 2026年安徽省蚌埠局属校初三第二学期第3次练考英语试题含解析
- 云南省曲靖市重点名校2026届初三第三次质量检测试题试卷英语试题含解析
- 上海市浦东区重点中学2026届初三下学期5月热身英语试题含解析
- 2026年上海浦东第四教育署初三第六次质检语文试题含解析
- 养成教育六行动
- 高一下期《化学必修第二册》实验课计划
- 手工焊锡知识培训课件
- 摄像头基础知识
- 融媒体语境下河南卫视文化节目品牌建设浅析
- Supplier-Audit-Check-List半导体芯片制造企业供应商审核清单
- 电机轴承知识与润滑知识
- 高考生物选择性必修1稳态与调节基础知识填空默写(每天打卡)
- DL-T5461.1-2012火力发电厂施工图设计文件内容深度规定第1部分:总的部分
- DL-T976-2017带电作业工具、装置和设备预防性试验规程
- 2024小升初语文复习 名著阅读《三国演义》(知识点+练习)学生版+解析版 (二)
评论
0/150
提交评论