版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-5"\h\z一.项目概述1二.项目需求分析1三.项目概要设计1四.项目详细设计2五.测试分析5六.专业实习心得体会8#本课题设计始于2015年10月26日,并于12月11日完成。本次设计的主要目的是通过http网络文件的下载,学习界面开发工具QT的使用和熟练使用C++语言来编写程序开发应用,了解相关网络协议,提高实际应用系统开发的能力。开发实际应用时,需要对应用所需具备的基本功能进行分析(即需求分析),比如下载速度和文件大小的显示等等,如此才能更好的提升用户使用感。二.项目需求分析为了开发出真正满足用户需求的产品,就必须了解用户的需求。因此,我们需要使用需求分析来确定系统“必须完成哪些工作”,也就是对目标产品提出完整、准确、具体的要求。功能需求:使用QT界面开发工具设计一个友好的客户端界面,用户能够使用其下载各种类型的http网络文件。在下载之前,用户将网络链接给出即可获取要下载的文件的总大小。在下载的过程中,用户能够了解文件的下载进度和下载速度。可靠性和可用性需求:用户可以使用该产品下载任意一种http网络文件,下载下来的文件可以使用并不会出错。接口需求:“网络文件下载链接必须放在‘链接地址'文本框中,下载文件总大小须放在'totalsize'文本框中,已下载文件大小须放在'readyread'文本框中,下载速度须放在‘speed'文本框中,下载过程中进度条'progressbar'会进行更新显示”为用户接口需求。“下载的网络文件必须以http://开头作为地址链接”为通信接口需求。约束:开发必须使用linux系统下的界面开发工具QT,并且开发工具必须使用http协议作为通信协议来实现一个客户端和服务端的请求和应答。可以使用QT网络模块中提供的网络访问接口来实现http编程。将来可能提出的要求:可支持断点下载的功能。E-R图:文件大小下载HTTP开头的链已下载文件大小下载界面下载速度网络文件文件大小下载HTTP开头的链已下载文件大小下载界面下载速度网络文件客户端三.项目概要设计需求分析确定过后,就需要概要设计来确定系统“应该怎么做”了。由此来确定系统的组成模块及其相互之间的关系。系统设计阶段:使用QT网络模块中的网络访问接口来实现http编程。首先使用QNetworkRequest类创建使用http协议的对象url并发送网络请求,使用QNetworkAccessManager类来协调网络操作,同时可以使用QNetworkReply类来监听每一个应答信号并触发槽函数。即下载前发送请求,统一下载后获取要下载的文件的总大小并显示,此时进度条隐藏;下载时获取当前已读取的数据的大小并显示,同时计算下载速度并更新进度条;下载后删除文件指针,隐藏进度条,速度清零。结构设计阶段:QT客户端界面,mainwindow.h头文件,mainwindow.cpp界面设计内容,main.cpp主函数。详细设计需要具体提出实现系统功能的具体步骤。系统流程图:开始客户端界面如下图:(其中进度条隐藏)头文件mainwindow.h:classMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitMainWindow(QWidget*parent=0);~MainWindow();voiddownloadFile(QUrlurl);//请求链接qint64getFileSize(QUrlurl,inttryTimes=3);voidupdateSpeed();privateslots:voidhttpFinished();//完成下载后的处理voidhttpReadyRead();//接收数据时的处理voidupdateDataReadProgress(qint64,qint64);//更新进度条voidon_pushButton_clicked();//下载按钮的单击事件槽函数private:Ui::MainWindow*ui;QNetworkAccessManager*manager;QNetworkReply*reply;QUrlurl;//存储网络地址QFile*file;//下载文件指针QStringerrorInfo;qint64totalsize,readysize1=0,readysize2=0;};获取文件名并创建同名空文件:url=ui->lineEdit->text();//获取界面输入的url地址QFileInfoinfo(url.path());QStringfileName(info.fileName());//获取文件名if(fileName.isEmpty())fileName="maomao.html";file=newQFile(fileName);//使用文件名创建一个同名空文件if(!file->open(QIODevice::WriteOnly)){//如果打开文件失败,则删除file,是指针为0并返回qDebug()<<"fileopenerror";deletefile;file=0;return;}下载前获取文件总大小getfilesize()函数://发出请求,获取目标地址的头部信息QNetworkReply*reply=manager.head(QNetworkRequest(url));if(!reply)continue;connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));loop.exec();if(reply->error()!=QNetworkReply::NoError){errorInfo=reply->errorString();continue;}QVariantvar=reply->header(QNetworkRequest::ContentLengthHeader);reply->deleteLater();size=var.toLongLong();Getfilesize()调用:totalsize=getFileSize(url);QStringsize=QString::number(totalsize/1024,10);ui->totalsizelineEdit->setText(size);更新速度updatespeed()函数:qint64speed=readysize2-readysize1;//用已下载文件的大小之差来表示速度readysize1=readysize2;QStringreadyspeed=QString::number(speed/1024,10);ui->speedLineEdit->setText(readyspeed);Updatespeed()调用:readysize2=bytesRead;//获取已下载文件的大小readsize=QString::number(bytesRead/1024);ui->readyreadlineEdit->setText(readsize);updateSpeed();更新进度条:ui->progressBar->setMaximum(totalBytes);//读取最大值ui->progressBar->setValue(bytesRead);//读取当前值关联信号和槽://当有新数据可以读取时发送readyread()信号,执行httpreadyread()函数将新数据写入同名文件connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));//当网络请求的下载进度更新时发送downloadprogress()信号,执行updateDataReadProgress()函数更新进度条和下载速度connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));//当应答处理结束时发送finished()信号,执行httpFinished()函数清空速度文本框,隐藏进度条,删除file指针connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));五.测试分析
文懊B輪辑旧童耆(V)工具⑴帮助(H)慈+凰打开共享+刻录耳下载反=®名称debugrelease修改日期2015/12/1113:122015/12/913:25文件矣文懊B輪辑旧童耆(V)工具⑴帮助(H)慈+凰打开共享+刻录耳下载反=®名称debugrelease修改日期2015/12/1113:122015/12/913:25文件矣「36OFreeAPSetup2015/12/1113江3应用程序10,209KE怎库阳杲腥视w亘图片苟迅雷下载Jf肓乐■计帥曲360sd_std_121⑥360se_setup@8155029倉download雯□-U-U-U□■=〕instlinkMakefileMakefiIe.Release5ui_mainwindow2015/12/1113:0929,460KB2015/12/1112:2346,249KB2015/12/1111:11ChromeHTMLD...39KB2015/12/1111:19WinRAR压缩文件0KB2015/12/1112:151049KB2015/12/1110:561KB2015/12/1022:5820KB2015/12/1022:58DEBUGS?件47KB2015/12/1022:58RELEASE文件47KB2015/12/920:54文件1KB2015/12/1113:03C++Headerfile8KB360FreeAP_Setup修改日期:2015/12/1113:13创建日期:2015/12/1113:10硏孑龌聞K小:9.96ME已站]项i■计已站]项f360FreeAP_Setup性常规]兼容性數宇签名安全详细信息以前的版本SFiOFrepAF_Setup文件类型:应用程序cexe)描述:3旳免费肛虹安装程序位置:C:''i.Ueere'i.Aiininiet「3.torIDesktop''i.duwnlo3.JI1大小:9.96MB(10?453?616宇节〕占用空间:9.97MB(10,457,088宇节)创建时间:2015年12月11日,13:10:52修改时间:2015年12月11日,13:13:20访问时间:2015年12月11日,13:10:52属性:只读®隐藏⑪高级⑪…确定」取消应用⑥六.专业实习心得体会王雪兰:本次课题实验感觉难度比较大。首先是QT界面开发工具的使用很不熟练,以前只用过delphi界面开发工具,但是这次要求在linux系统下进行界面设计,所以选择了QT。查了很多的资料,发现QT一般都用C++进行开发,于是C++成了第二个难点。通过图书馆查阅资料对客户端下载文件的基本功能实现有了认识,结果在编程的过程中遇到最多的问题就是C++语言的使用不熟悉,比如数据类型转换将Qint64类型转换为QString类型,QString::number();边查资料和课本才慢慢适应QT中C++的用法。然后就是文件能下载的时候发现,无法在文件下载前就获取到文件大小,只能下完才能获取到。由于不能提前获取到文件的总大小,导致即使获取了文件当前大小,进度条无法显示。于是就想通过manager.head(QNetworkRequest(url))获取链接对应的http头部信息,然后用header(QNetworkRequest::ContentLengthHeader)从头信息中获取该文件的长度并输出,这样进度条也能显示了。下载速度是通过下载文件的过程中,实时监听读取数据,使用每次读取数据后文件的大小与前一次相减,得到的差值就是文件的下载速度。这次实验虽然很难,但是最终仍然能够顺利完成真的很激动。每次进步一小步都能够很激励人心。实验过程中查阅了大量的资料和课本,感觉都没有哪次做实验这么麻烦,各种信息在大脑中转,刚开始也感觉没有头绪,很累,也自暴自弃。不过总是突然就想到解决的方法然后获得成功和小进步,最后就重拾信心了。在此,也要感谢同组小伙伴的合作和帮助!宋兵兵:本次主要是要在之前课程学习的基础之上做一个在Linux下运行的下载程序,这个程序是利用HTTP协议进行数据传输的程序,通过统一资源定位符URL进行数据资源的获取,功能涉及到文件总大小,下载速度,文件下载进度,当前已下载的文件大小等。本次试验是一个针对下载的程序,程序是用QT编写的,内容包括了课程内容所涉及的地方,如LINUX下的通信与数据传输之类。在做数据传输时是利用QNetworkRequest实现功能的,通过readyread函数读取数据然后进行存储,数据传输结束发送finished信号,在QT里利用connect将信号与槽进行连接,实现信号触发控制函数。在试验中出现了对数据转换的错误,从数据流获取的数据不能传递给进度条和lineedit显示,后来了解到是通过totalsize=QStrin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某金属加工厂设备操作准则
- 2026学年福建省福鼎市二年级数学期末点睛提升专项攻坚题(详细参考解析)详细答案和解析
- 施工脚手架搭设方案
- 微波技术和高功率微波在高压输电线路防雷中的应用-洞察与解读
- 港口智能视频分析技术-洞察与解读
- 石大液压与气动技术实验大纲
- 模糊控制系统中不确定性的处理与可观测性提升-洞察与解读
- 生物陶瓷材料的生物活性研究-洞察与解读
- 环保型新材料在球场建设中的运用-洞察与解读
- 电极材料表面改性-洞察与解读
- 义务教育数学课程标准(2022年版)练习题及答案
- 97G329-8建筑抗震结构详图(钢筋砼柱单层厂房)图集
- 省级行业产教融合共同体申报书、申报书、参与建设证明
- JJG 241-2002精密杯形和U形液体压力计
- T-SHNA 0003-2023 消化内镜诊疗前消化道准备
- DB21-T 2819-2017岩土工程勘察报告编制规范
- 幼儿教育学心理学复习资料
- JGT266-2011 泡沫混凝土标准规范
- (完整版)医疗器械网络交易服务第三方平台质量管理文件
- 深圳市社会保险定点医疗机构医疗服务协议书共207课件
- 脐灸专业知识课件
评论
0/150
提交评论