




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕 业 设 计(论 文) 设计(论文)题目: 基于qt的ftp下载工具 学生姓名 指导教师 讲师 二级学院 信息技术学院 专 业 计算机科学与技术 班 级 计算机科学与技术(单) 学号 提交日期 2013年4 月25 日 答辩日期 2013年5 月 4 日 xxxxx 学 院 学 位 论 文 使 用 授 权 声 明金陵科技学院有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布(包括刊登)论文的全部或部分内容。论文的公布(包括刊登)授权金陵科技学院教务处办理。
2、学生签名: 指导教师签名: 日 期: xx科技学院学士学位论文 目录目 录摘 要iiiabstractiv1 引言11.1 课题背景11.2 课题意义11.3 qt介绍11.3.1 qt语言的特性21.3.2 qt的优势21.3.3 qt/embedded介绍31.4 ftp通信协议42 qt架构与平台搭建62.1 qt的架构62.2 qt的组成62.3 qt开发平台的搭建72.3.1在虚拟机vmware下安装ubuntu72.3.2 qt sdk及qt creator工具的安装83 系统设计与实现103.1 系统分析103.1.1功能设计103.1.2具体需求103.2 程序实现113.2.
3、1 使用qt进行gui开发的一般流程113.2.2 下载工具的界面设计113.2.3 具体功能实现134 系统测试224.1 qt creator调试器224.2 qt调试方法224.3 出现的错误及解决方案234.4 ftp下载工具的编译与运行234.5 系统存在的问题265 总结27参考文献28致 谢29iixx科技学院学士学位论文 摘要基于qt的ftp下载工具摘 要随着嵌入式系统、图形用户界面(gui)的广泛应用,实时嵌入式系统对gui的需求越来越明显,而这一切均要求有一个高性能、高可靠的gui支持。qt作为一种先进的跨平台语言,可以在windows、linux以及symban和众多的嵌
4、入式场合发挥作用。本文首先阐述了qt的架构和特点及ftp通信协议的原理,然后在分析需求的基础上,详细论述了利用qt4.0设计出该ftp下载工具的具体方法。该下载工具实现了给出计算机名称或者ip地址进行ftp登录,并能查看本地和服务器端的文件信息列表,从而对指定文件的下载和上传功能,具有一定的实用性和方便性。关键词:qt语言;跨平台;ftp;下载iiixx科技学院学士学位论文 abstractbased on the qt ftp download toolabstract along with the embedded system, the graphical user interface
5、(gui) extensive application of the embedded system, real-time demand for gui is more and more obvious, and all of these are required to have a high performance, high reliability and gui support. qtas an advanced cross-platform language, can in windows, linux and symban and numerous embedded occasion
6、s play a role. this article elaborates the structure and characteristics and qt ftp communication protocol, then in the principle based on analysis demand, elaborated the use qt4.0 design the specific methods of ftp download tools. the download tool to achieve produces the computer name or ip addres
7、s for ftp login, check local and server-side file information list, and can realize to the specified file download and upload function, has a certain practicality and convenience.key words: qt language ; cross-platform ; ftp protocol ; file download iv xx科技学院学士学位论文 第1章 引言 1 引言1.1 课题背景21世纪是网络的时代,是信息的
8、时代,是多媒体的时代。internet技术的迅猛发展与普及,推动了世界范围的信息传输和信息交流。随着internet的发展,internet将提供越来越多的服务。但就目前而言,网民使用较多的主要有下列服务:电子邮件(e-mail),文件传输(ftp),远程登录(telnet),万维网(world wide web),新闻组(newsgroup/usenet)和电子公告牌(bbs),聊天系统(chat)。internet如此流行,其中ftp功不可没。成千上万的数据、软件分布在世界各地,有了它,足不出户,只要敲几个字,就能轻而易举地得到想要的。现在全世界已有1000多个ftp文件服务器对所有int
9、ernet用户开放,用户可以通过与internet相连的计算机,把自己需要的文件传过来。目前已经有许多互联网站点都建立了可供大众访问的资料库,这些资料都可以被通过ftp获取。匿名ftp使用户有机会存取到世界上最大的信息库,这个信息库是日积月累起来的,并且还在不断增长,永不关闭,涉及到几乎所有主题。而且,这一切是免费的。internet之所以能延续到今天,是因为人们使用通过标准协议提供标准服务的程序1。由ftp提供的文件传送是将一个完整的文件从一个系统复制到另一个系统中。要使用ftp,就需要有登陆服务器的注册账号,或者通过匿名ftp的服务器来使用。与telnet类似,ftp最早的设计是用于两台不
10、同的主机,这两个主机可能运行在不同的操作系统下、使用不同的文件结构、并可能使用不同字符集。但不同的是,telnet获得异构性是强制两端都采用同一个标准:使用7比特ascii码的nvt。而ftp是采用另一种方法来处理不同系统间的差异:ftp支持有限数量的文件类型如ascii文件,二进制文件等等和文件结构(面向字节流或记录)。目前在国内外基于ftp的网络通信仍然是internet上文件传输的通用方法,就如同当初ftp刚出现的时候,ftp并没有有多大的变化,但是在internet迅猛发展的形势下,其安全问题还是日益突出出来。但是ftp还是非常的流行,大部分的网站以及论坛等等涉及到用户下载的网站都提供
11、了ftp服务,特别是校园中也可以利用ftp服务器来使身处校园中的每个人都可以通过ftp来下载或共享文件,这使得每个人都能享受到网络的便捷2。1.2 课题意义本系统就是利用qt所带的qftp类库设计出具有良好交互界面,从而简化用户操作的难度,使用户能够轻松简单的使用ftp,享受ftp所带来的便利。1.3 qt介绍qt是一个多平台的c+ 图形用户界面应用程序框架,而且qt提供了一组更容易理解的gui类,运行的更快,另外qt特有的信号和槽,更易使用。qt面向对象且很容易扩展, 并且允许真正地组件编程。qt工具包是一个c+的类库并且是使用“一次编写,随处编译”的方式构建多平台的图形用户界面程序的一套工
12、具。由于qt特性:平台无关性、优化了内存和资源的利用、拥有自己的窗口系统、模块化可裁剪性、代码完全公开3。1.3.1 qt语言的特性 qt是trolltech公司的一款图形开发产品,它采用完全的面向对象技术来进行图形应用程序的设计,允许真正的组件编程,qt是一个全面的c+应用程序开发框架,它包含一个类库,和用于跨平台开发及国际化的工具,可以开发高性能,跨平台客户端,以及服务器端的应用程序。 qt 类库是一个拥有超过 400个c+类,同时不断扩展的库。它封装了用于端到端应用程序开发所需要的所有基础结构。优秀的qt应用程序接口包括成熟的对象模型,内容丰富的集合类,图形用户界面编程与布局设计功能,数
13、据库编程,网络,xml,国际化,opengl 集成等等。 qt 设计者 是一个功能强大的gui布局与窗体构造器,能够在所有支持平台上,以本地化的视图外观与认知,快速开发高性能的用户界面。 qt 语言家 是一套用来消除国际化工作流程中所带来障碍的工具。使用qt语言家,开发小组可把应用程序的翻译转换外包给非技术性翻译人员,从而可增加精确度,大大加快本地化处理过程。 qt 助手 一个完全可自定义,重新分配的帮助文件或文档浏览器,它可与基于qt 的应用程序运行。使用qt助手,开发小组同样能够很大程度上加快文档的处理过程4。1.3.2 qt的优势 作为嵌入式图形界面开发工具,qt优势很多,有如下一些:
14、1.支持平台广泛 qt应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置,其支持的平台有:qt/windows(windows xp,2000,nt4,me/98)、qt/mac (mac os x)、qt/x11(linux ,solarishp-ux,irix,aix)等。图1.1 qt支持平台 2.封装多qt对不同平台的专门qpi进行了专门的封装(文件处理、网络等)。3.面向对象qt具有模块设计和注重软件构件或元素的可重用性的特点。 4.构件支持 qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调
15、,冰支持对象之间在彼此不知道对方信息的情况下进行合作,这使得qt非常适合于真正的构件编程。 5.友好的联机帮助 qt提供了大量的联机参考文档,有超文本html方式,也有unix帮助手册和补充说明,并且对于初学者,其中的指南将一步步介绍如何进行qt编程。 6.便利性 由于qt是一种跨平台的gui工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题。 7.用户自定义 使用其他的一些工具包经常会遇到这样的一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。而在qt中生成用户自定义的组件非常简单,而且易于修改组件
16、的行为。 8.国际化 qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,qt还支持双字节16bit国际字符标准。 9.丰富的api函数 qt为专业应用提供了大量的函数,在qt的api中含有大约250个c+类,大多数的类都是gui专有的。 10.可用户化外观 qt支持主题,基于qt的应用程序能够在windows外观、motif外观,以及其他一些用户化主题之间切换。 11.完整的一套组件工具 qt编程的基本模块称之为组件,组件是用户界面的组成部分,qt含有用来创建专业外观的用户界面所需要的所有组件。1.3.3 qt/embedded介绍qt/embedded为
17、带有轻量级窗口系统的嵌入式设备提供了标准的api。qt/embedded面向对象的设计思想,使得它能一直向前支持鼠标、键盘、图形加速卡等附加设备。通过使用qt/embedded,开发者可以感受到qt/x11、qt/windows和qt/mac等不同的版本下使用相同的api编程带来的便利5。qt/embedded与qt/x11的linux版本的比较如下表所示。表1.1 qt/embedded与qt/x11的linux版本的比较应用源代码qt apiqt/embeddedqt/x11qt/xlibx window serverframe-bufferlinux 内核1.4 ftp通信协议1.ftp
18、概述文件传输协议(英文:file transfer protocol,简称为ftp)是用于在网络上进行文件传输的一套标准协议,它属于网络传输协议的应用层。ftp是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像mime或unicode一样。但是,ftp有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长;并且不时的必须执行一些冗长的登陆进程。ftp服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流,空闲很长
19、时间后,客户端的防火墙,会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。2.ftp通信协议的作用(1)促进文件的共享(计算机程序或数据)(2)支持间接或者隐式的使用远程计算机(3)向用户屏蔽不同主机中各种文件存储系统(file system)的细节(4)可靠和高效的传输数据3.ftp通信协议缺点密码和文件内容都使用明文传输,可能产生不希望发生的窃听事件,因为必须开放一个随机的端口以创建连接,当防火墙存在时,客户端很难过滤处于主动模式下的ftp流量,这个问题,通过使用被动模式的ftp,得到了很大解决
20、。服务器可能会被告知连接一个第三方计算机的保留端口,此方式在需要传输文件数量很多的小文件时,性能不好。ftp通信协议虽然可以被终端用户直接使用,但是它是设计成被ftp客户端程序所控制。运行ftp服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于ftp服务器的配置情况。4.ftp的使用ftp有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户
21、端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。一个主动模式的ftp连接创建要遵循以下步骤:a.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个ftp进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。b.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数
22、据端口。c.服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。 d.客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。5 xx科技学院学士学位论文 第2章 qt架构与平台搭建 2 qt架构与平台搭建2.1 qt的架构 1.窗口系统 一个qt/embedded窗口系统包括了一个或多个进程,其中的一个进程可作为服务器。这个服务进程会分配客户显示区域,以及产生键盘和鼠标时间。此服务进程还能为已经运行的客户程序提供用户接口和输入方法。它其实就是一个有某些额外权限的客户进
23、程。任何程序都可以在命令行上加上“-qws”的选项来把它作为一个服务器来运行。 2.字体qt/embedded支持四种不同字体格式:true type 、postscript type1 、位图发布字体(bdf)和qt的预呈现(pre-rendered)字体(qpf)。qt还可以通过增加qfontfactory的子类来支持其他字体,也可以支持以插件方式出现的反别名字体。 3.输入设备qt/embedded 3.0支持集中鼠标协议:busmouse、microsoft、intellimouse 和mouseman。2.2 qt的组成qt是一个完整的c+应用程序开发框架。它包含一个类库和用于跨平台
24、开发的国际化工具。 1.qt类库 众多的qt类库构成qt的基础。该库可以利用大约400个面向对象的类,这些类带有大多数构建跨平台服务器与富客户端应用程序的底层基础构造函数。这些库包括用于gui、布局、数据库、国际化、网络与xml等的类。 2.信号/槽机制信号与槽机制是qt的核心机制,要精通qt编程就必须对信号和插槽有所了解。信号和插槽是一种高级接口,应用于对象之间的通信,它是qt核心特性,也是qt区别于其他工具包的关键所在。信号和插槽是qt自行定义的一种通信机制,它独立于标准的c/c+语言,因此要正确地处理信号和插槽,必须借助一个称为moc(metia object compiler)的qt工
25、具,该工具是一个c+预处理程序,它为高层次的事件处理自动生成所需要的附加代码6。多个信号与单个插槽可以连接,单个信号与很多插槽也可以连接,甚至将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射,系统都将立刻发射第二个信号。总之,信号与插槽构造了一个强大的部件编程机制。对象间信号与插槽的连接关系如图2.1所示图2.1 信号与槽连接关系3. qt designer图形设计器qt图形设计器是一个所见即所得的全方位gui构造器。利用qt designer,开发者可以释放各种qt控件构造图形用户界面,而不需要编写一行代码。使用qt图形设计器的布局管理可以生成具有平滑改变尺寸功能的对
26、话框。4. qmake工具 编写用于多平台的软件是单调发威的,且可能出现错误,维护编制文件更是如此,尤其是当不同的编译器和平台组合需要若干个编制文件时,而通过使用qmake工具可以构建出cross-platform bulids 跨平台的应用程序。即qmake可以根据一个工程文件(.pro)产生不同平台下的makefile文件。qmake支持跨平台开发和所谓的影子生成(shadow builds)技术,qmake还易于在不同的配置中切换。2.3 qt开发平台的搭建 为了在pc主机上得到qt的开发环境,我们选择在windows操作系统中安装vmware虚拟机软件,再在其中安装我们需要的linux
27、操作系统。使用虚拟机的一大好处是,当在linux因为不熟悉而遇到问题的时候,可以很容易的回到windows中寻求解决方案,避免了在双系统中来回重启切换的麻烦。 2.3.1在虚拟机vmware下安装ubuntu我采用的安装环境是microsoft windows 操作系统,使用vmware 模拟虚拟机安装ubuntu linux 10.10版本,并对其进行设置,让它达到最好状态。因为linux图形模式占用物理内存在128mb以上(推荐256mb),我使用了512mb的内存。虚拟机软件使用了vmware5.5,因为vmware各方面性能测试均比ms vpc要好。vmware中所配置的硬件环境如下:
28、1、 cpu:intel core t2050(1.6ghz x2,l2 2048 k,mmx,sse3)2、 内存:512mb3、 主板芯片组:intel i945gm4、 显示芯片:主板集成 intel 945graphics5、 连接网络(因为本课题需要联网才能看到所实现的ftp下载功能)安装完ubuntu后,如果直接编译c+文件,比如就最简单的helloworld,也会提示比如找不到stdio库文件等警告或错误,原因是系统还没有安装相关的基本编程环境。这时只需依次执行下面的命令就行了: zhbzhb:$ sudo apt-get install build-essential pass
29、word: sudo apt-get install build-essential gcc /装编译器 sudo apt-get install libc6 libc6-dev /装基本开发库 sudo apt-get install manpages-dev /装manpage, 装了之后可以直接用 man printf 查阅printf的详细用法 $ sudo apt-get install g+ automake /编译qt的c+编译器需要安装 sudo apt-get install libqt4-opengl-dev /安装qt4 opengl 相关的开发库文件 其中g+与auto
30、make包并不属于qt包,但是编译qt的c+编译器需要安装,在g+包里。qt有自己的编译系统,automake并不是必须的,但有时候需要编译一些第三方的库,所以一般推荐安装上。2.3.2 qt sdk及qt creator工具的安装qt可以从nokia官方网站()上下载,包括qt sdk和qt creator 包。打开终端,输入命令sudo su,取得操作系统root权限。然后对下载好的sdk安装包进行chmod u+x操作,即对档案的拥有者赋予执行权限。接下来输入:./qt-sdk-liunx-x86-opensource-2.1.0.bin。执行qt sdk的安装操作。图2.2 qt cr
31、eator安装界面 qt creator安装完成之后,双击图标,进入qt creator ide界面, 如下图2.3所示:至此,平台搭建已经完成。图2.3 qt creator操作界面29 xx科技学院学士学位论文 第3章 系统设计与实现3 系统设计与实现3.1 系统分析3.1.1功能设计ftp下载工具的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着ftp服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或着把本地计算机的文件送到网络上一台远程的计算机去。而最原始的ftp下载需要很多的参数设置,对于设计开发有一定困难。本系统就是利用qt4所带的qftp
32、类库设计出具有良好交互界面,从而简化用户操作的难度,使用户能够轻松简单的使用ftp,主要的功能包括:用户登录,从根目录或指定位置获得文件目录列表,下载或上传等。该系统的运行流程如下图3.1所示。运行程序进入登录界面输入用户名密码登录选择文件下载文件或数据保存到指定目录图3.1系统运行流程图3.1.2具体需求 (1)连接需求根据用户所提供的信息包括ip地址(或ftp服务器域名),用户名与密码来与所选服务器进行连接,如果连接成功则显示连接成功的提示信息;如果连接失败,则显示连接失败的提示信息。 (2)文件浏览需求登录到指定的服务器后能查看服务器端的文件信息,包括文件目录、文件名称及文件大小等信息,
33、还可以改变当前文件目录。 (3)文件下载与上传需求使用户能够从服务器端下载所选的文件到本地所指定的目录下,也能够把目标文件上传给指定的服务器的特定目录。 (4)进度提示功能能够以进度条的形式告诉用户当前的下载进度。(5) 选择保存路径 能够对下载的文件进行指定路径保存。3.2 程序实现3.2.1 使用qt进行gui开发的一般流程 使用qt进行窗口程序设计的一般流程如下图3.2 所示:创建工程目录 新建工程创建图形界面编写代码生成main.c根据工程文件生成makefile编译并运行 图3.2 qt窗口程序设计流程3.2.2 下载工具的界面设计ftp下载工具的界面设计具体步骤如下: 1.新建工程
34、双击qt creator图标,点击create project按钮,选择qt c+project,接着输入文件名以及保存路径,然后点击“next”;这就进入到了qt creator的设计界面。选择左上角的file菜单,在下拉菜单里选择new file or project命令,选择c+ project选项,创建新的工程:。2.设计图形界面工程创建完毕后,开始创建图形界面。首先,选择file-new命令,创建一个新的窗体,把新窗体的名字命名为“ftp上传与下载”。接着向窗体上添加控件,添加控件的方法非常简单,采用拖放的方式即可。根据功能需要,我往窗体上加入了4个label,3个li
35、ne edit ,5个pushbutton部件,1个treewidget(窗体),1个tollbutton(返回按钮)及1个progress bar(进度条)部件,如图3.3所示,通过qt的设计器属性窗口将以上各个控件的显示名称改为图3.3所示,接着更改各控件属性:(1)将“服务器地址”label后的line edit的objectname属性改为“serverlineedit”,其text 属性改为一个我已经拥有的ftp网站地址,即“。(2)将“用户名”label后的line edit的objectname属性改为“userlineedit”,其text属性改为空,将其tooltip属性改为
36、“默认用户名请使用:空,此时密码任意。”(3)将“密码”label后的line edit的objectname属性改为“passwdlineedit”,其text属性改为空,将其echomode属性改为“normal”。(4)将“登录”按钮的objectname属性改为“loadbutton”。(5)将“返回上一级目录”按钮的objectname属性改为“parentbutton”。(6)将“下载”按钮的objectname属性改为“downbutton”。(7)将“退出”按钮的objectname属性改为“quitbutton”。progressbartoolbuttontreewidget
37、 图3.3 ftp下载工具界面3.2.3 具体功能实现1. qftp类在qt中,qftp类为我们实现了ftp协议的客户端所需要的功能,比如它不仅提供了完成最常用的各种ftp操作的函数,还能执行任意的ftp命令,并且qftp类是以异步方式工作的。在这里,我主要通过qt所提供的qftp类来实现本程序的主要功能。具体实现代码如下:class ftpclient:public qdialog1 2 q_object /因为下面有槽函数的声明,所以这里需要加上宏q_object,该宏被定义为: signals: void clicked( ); private slots:voidanimate();3
38、 public:4 ftpclient(qwidget*parent=0,qt:windowflags f=0);5 ftpclient( );6 public:7 qlabel* labelserver;8 qlineedit* lineeditserver;9 qlabel* labeuser;10 qlineedit* lineedituser;11 qlabel* labelpassword;12 qlineedit* lineeditpassword;13 qpushbutton* pushbuttonlogin;14 qpushbutton* pushbuttonput;15 qp
39、ushbutton* pushbuttonget; 16 enum statusnone,login,put,get;17 status curstatus; 18 qftp *ftpclient;19 qflie *localfile;20 public slots:21 void slotlogin( );22 void slotput( );23 void slotget( );24 void slotstatechanged(int state);25 void slotdone(bool error); ;以上这段代码是qftp类的声明,qftp为我们提供了基于ftp协议的客户端功能
40、,其中第7到第15行是对程序所使用的各控件的定义,第20到第25行是定义了所用到的各种公共的槽函数。而enum status定义了当前ftp的状态,如登录、上传、下载状态,用来指示成功后的状态显示。2. 槽函数定义与连接在qt程序中,事件处理的方式采用了信号(signal)和插槽(slot)机制。信号和插槽机制的好处是不需要调用翻译表,节省资源。利用信号和插槽进行对象间的通信是qt的最主要特征之一。当槽函数与信号相连接时,当这个信号发生时,槽函数即可被自动调用。因此我们在实现的时候,需要预先定义槽函数,并将其与特定的信号连接,才能完成对事件的触发和捕捉处理。系统设计中所定义的主要槽函数如下:
41、void connectordisconnect( ); /定义登录和注销 void downloadfile( ); /定义下载函数 void ftpcommandfinished(int commandid, bool error); void addtolist(const qurlinfo &urlinfo); void processitem(qtreewidgetitem *item, int column); void cdtoparent( ); /定义返回父目录 void updatedatatransferprogress(qint64 readbytes,qint64 t
42、otalbytes); 定义完了槽函数,接下来就是最为重要的事情将信号与槽进行连接。例如当我点击“登录”按钮的时候,这个就作为一个信号,与之相连接的槽就会触发,连接指定的地址。在这里,我将ftp命令开始、结束,进度条更新和文件列表更改等等事件关联到它的槽上。void ftp:connectordisconnect( )/打开连接与关闭连接主机 qdebug( )abort( ); ftp-deletelater( ); ftp=0; /设置控件的初始状态 ui-treewidget-setenabled(false); ui-parentbutton-setenabled(false); ui
43、-downbutton-setenabled(false); ui-loadbutton-setenabled(true); /ui-loadbutton-settext(tr(连接); ui-statuslabel-settext(tr(请输入ftp服务器名.); return ; /如果没有执行上面的if,说明初始是没有连接的,需要进行连接服务器 ftp = new qftp(this); qstring serveraddress = ui-serverlineedit-text( ); if(serveraddress.isempty( ) qmessagebox:warning(th
44、is,tr(错误),tr(请输入ftp服务器地址); return; qstring username = ui-userlineedit-text( ); if(username.isempty( ) qmessagebox:warning(this,tr(错误),tr(请输入用户名); return ; qstring password = ui-passwdlineedit-text( ); connect(ftp,signal(commandfinished(int,bool),this,slot(ftpcommandfinished(int,bool); qdebug( )treew
45、idget-clear( ); currentpath.clear( ); isdirectory.clear( ); qurl url(ui-serverlineedit-text( ); if(!url.isvalid( )|url.scheme( ).tolower( )!= qlatin1string(ftp) ftp-connecttohost(ui-serverlineedit-text( ),21); ftp-login( ); else ftp-connecttohost(url.host( ),url.port(21); if(!url.username( ).isempty
46、( ) ftp-login(qurl:frompercentencoding(url.username( ).tolatin1( ),url.password( ); else ftp-login(ui-userlineedit-text(),ui-passwdlineedit-text( ); if(!url.path( ).isempty( ) ftp-cd(url.path( ); ui-treewidget-setenabled(true); ui-loadbutton-setenabled(false); ui-loadbutton-settext(tr(注销); ui-openfi
47、lebutton-setenabled(true); ui-statuslabel-settext(tr(连接到ftp服务器 %1.).arg(ui-serverlineedit-text( );如图3.4是本系统所用到的信号与槽的连接关系图,其中像listinfo信号与add to list槽的连接就是用来根据数据的传输量来更新进度条的状态。图3.4 信号与槽连接图3. 登录的主要实现代码及分析这个事件用来检查启动以及登录ftp服务的状态,并把状态迅速显示在状态条上,由于qt槽函数是实时传递的,类似于c+中的message,因此状态条的更新也是非常的及时。slotloginclient:sl
48、otlogin( )1 qstring serveraddress = lineeditserver-text( );2 if(serveraddress.isempty( )3 4 qmessagebox:warning(this,tr(error),te(please input server address!);5 return;6 7 qstring usename = lineedituser-text( );8 if(username.isempty( )9 10 qmessagebox:warning(this,tr(error),tr(please input user nam
49、e!);11 return;12 13 qqstring password = lineeditpssword-text( );14 ftpclient=new qftp( );15 ftpclient-connecrtohost(serveraddress);16 connect(ftpclient,signal(statechanged(int),this,slot(slotstatechange(int);17 connect (ftpclient,signal(done(bool),this,slot(slotdone(bool);18 ftpclient-login(username,password);19 curstatus=login;第1到13行进行输入数据的获取和校验。第14行创建一个qftp对象。第15行通过connecttohost()方法连接ftp服务器端。第16、17行连接信号与槽,done(bool error)信号在最后一条命令处理完毕后发出,参数error指示是否有错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人诊所合同标准文本
- 知识管理系统规划计划
- 住宅加装电梯合同标准文本
- 儿童合同标准文本标准文本玩具
- 2025年住宅楼购房合同全文(合同范本)
- 2025房地产项目借款合同协议
- 宣传策划方案(6篇)
- 监理工程师考试首要知识点试题及答案
- 2025年中外合作开发合同
- 短视频委托代运营服务合同-模板
- 2024年扬州市事业单位统考招聘笔试真题
- 高中主题班会 高一下学期《自律自主自觉-成就更好的自己》主题班会教案
- 舞蹈简史考试题及答案
- 3.1公民基本权利 课件 2024-2025学年统编版道德与法治八年级下册
- 2025年浙江安防职业技术学院单招职业倾向性考试题库汇编
- 2025年ACR痛风管理指南
- 2024年毕节市东关坡粮食储备有限公司社会招聘笔试真题
- DBJ50T-309-2018 地下管网危险源监控系统技术标准
- 广东省汕头市2025年普通高考第一次模拟考试生物学试题(含答案)
- 酒店服务人员职业道德课件
- 河道清淤人员培训
评论
0/150
提交评论