全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Qt实现FTP的上传和下载的实例代码

为了方便网络编程,Qt 提供了 Network 模块。该模块包含了许多类,本文介绍了Qt实现FTP的上传和下载,分享给大家

本来想简单抄抄书,随便手写个Ftp客户端的,结果发现教材上的是基于Qt4的QFtp类库,而在Qt5中取消了这一个类库(同时也取消了QHttp等的类),取而代之的是QNetworkAccessManager 这个类,把这些杂货全都揽下来了,据说是因为之前的两个类有重复而且效率有问题balabala。于是就百度了一下,发现百度上要么讲的不全,要么就是要去下一个由热心网民重新封装的QFtp类。显然我并不喜欢无脑复制粘贴,想好好看下Qt官方提供的东西的用法,深入的理解下Qt网络编程,于是就果断自行google(话说google真好用),加上查看帮助文档,终于把一个简版的Ftp客户端大概框架弄清楚了。

不多说,上源码:

Dialog.pro 

#-------------------------------------------------
#
# Project created by QtCreator 2015-10-29T23:52:56
#
#-------------------------------------------------
QT += core gui
QT += network #这里要添加这个库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QFtp
TEMPLATE = app
SOURCES += main.cpp
 dialog.cpp
HEADERS += dialog.h

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
//注意需要添加的头文件
#include<QDialog>
#include<QPushButton>
#include<QFile>
#include<QNetworkReply>
#include<QLineEdit>
#include<QtNetwork/QNetworkAccessManager>
#include<QtNetwork/QNetworkRequest>
#include<QLabel>
#include<QString>
#include<QGridLayout>
#include<QMessageBox>
class Dialog : public QDialog
{
 Q_OBJECT
public:
 Dialog(QWidget *parent = 0);
 ~Dialog();
public:
 QGridLayout *layout;
 QLabel *LbServer,*LbUser,*LbPasswd;
 QLineEdit *LeServer,*LeUser,*LePasswd;
 QPushButton *PbPut,*PbGet;
 QNetworkAccessManager manager;//这个是重点
protected slots:
 //处理按钮的点击信号
 void slotPut();
 void slotGet();
 //处理网络连接的信号
 void managePut(QNetworkReply*);
 void manageGet(QNetworkReply*);
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
Dialog::Dialog(QWidget *parent)
 : QDialog(parent)
{
 setWindowTitle("My Ftp");
 layout=new QGridLayout(this);
 LbServer=new QLabel("Server:");
 LbUser=new QLabel("User:");
 LbPasswd=new QLabel("Passwd:");
 LeServer=new QLineEdit("ftp://120.27.41.126/home/myths/1.txt");
 LeUser=new QLineEdit("myths");
 LePasswd=new QLineEdit("123456");
 LePasswd->setEchoMode(QLineEdit::Password);//设置加密显示
 PbPut=new QPushButton("Put");
 PbGet=new QPushButton("Get");
 layout->addWidget(LbServer,0,0);
 layout->addWidget(LeServer,0,1);
 layout->addWidget(LbUser,1,0);
 layout->addWidget(LeUser,1,1);
 layout->addWidget(LbPasswd,2,0);
 layout->addWidget(LePasswd,2,1);
 layout->addWidget(PbPut,3,0);
 layout->addWidget(PbGet,3,1);
 setFixedSize(300,200);//固定大小
 //按钮点击事件信号槽的连接
 connect(PbPut,SIGNAL(clicked()),this,SLOT(slotPut()));
 connect(PbGet,SIGNAL(clicked()),this,SLOT(slotGet()));
}
void Dialog::managePut(QNetworkReply * reply){
 qDebug()<<reply->error();//输出调试信息
 switch(reply->error()){//判断连接后的状态
 case QNetworkReply::NoError:
 QMessageBox::information(this,"Put information","Upload Success!");
 break;
 case QNetworkReply::HostNotFoundError:
 QMessageBox::information(this,"Put information","Host Not Found!");
 break;
 case QNetworkReply::AuthenticationRequiredError:
 QMessageBox::information(this,"Put information","Login Failure!");
 break;
 default:
 QMessageBox::information(this,"Put information","Unknown Failure");
 break;
 }
}
void Dialog::manageGet(QNetworkReply *reply){
 //基本和managerPut类似 
 qDebug()<<reply->error();
 QByteArray data;
 switch(reply->error()){
 case QNetworkReply::NoError:
 data=reply->readAll();//从url中读取文件内容,输出到data中(也可以再将数据写入到文件中,为了方便,这里就权且打印一下吧)
 QMessageBox::information(this,"Put information","Upload Success!nThe file you've got is :n"+data);
 break;
 case QNetworkReply::HostNotFoundError:
 QMessageBox::information(this,"Put information","Host Not Found!");
 break;
 case QNetworkReply::AuthenticationRequiredError:
 QMessageBox::information(this,"Put information","Login Failure!");
 break;
 default:
 QMessageBox::information(this,"Put information","Unknown Failure");
 break;
 }
}
Dialog::~Dialog()
{
}
void Dialog::slotPut(){
 //判断信息输入完整
 if(LeUser->text().isEmpty()||LePasswd->text().isEmpty()||LeServer->text().isEmpty()){
 QMessageBox::warning(this,"Error","Please fill in the information");
 return ;
 }
 //重点!将之前的槽清空并重新连接至需要的
 manager.disconnect(SIGNAL(finished(QNetworkReply*)));
 //完全清空某对象连接的槽可以用manager.disconnect();
 connect(&manager,SIGNAL(finished(QNetworkReply*)),SLOT(managePut(QNetworkReply*)));
 //设置登录信息
 QUrl url(LeServer->text());
 url.setPort(21);
 url.setUserName(LeUser->text());
 url.setPassword(LePasswd->text());
 QByteArray data="This is the test data.n";
 /*QNetworkReply *reply=*/
 manager.put(QNetworkRequest(url),data);//将data上传到url中,返回的reply将触发网络的连接信号
}
void Dialog::slotGet(){
 //基本意义与slotPut类似
 if(LeUser->text().isEmpty()||LePasswd->text().isEmpty()||LeServer->text().isEmpty()){
 QMessageBox::warning(this,"Error","Please fill in the information");
 return ;
 }
 manager.disconnect(SIGNAL(finished(QNetworkReply*)));
 connect(&manager,SIGNAL(finished(QNetworkReply*)),SLOT(manageGet(QNetworkReply*)));
 QUrl url(LeServer->text());
 url.setPort(21);
 url.setUserName(LeUser->text());
 url.setPassword(LePasswd->text());
 /*QNetworkReply *reply=*/
 manager.get((QNetworkRequest(url)));
}

main.cpp

#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 Dialog w;
 w.show();
 return a.exec();
}

5、运行截图

权且只显示主界面:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Qt  # FTP上传  # FTP下载  # Qt QFtp客户端实现上传下载文件  # QT实现FTP上传文件  # 基于QT实现文件上传和下载功能  # 的是  # 清空  # 网络编程  # 客户端  # 类库  # 这一  # 取消了  # 可以用  # 而在  # 要去  # 给大家  # 只显示  # 好用  # 多说  # 取而代之  # 不全  # 再将  # 想好  # 弄清楚  # 大家多多 


相关文章: 如何批量查询域名的建站时间记录?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  相册网站制作软件,图片上的网址怎么复制?  如何通过万网虚拟主机快速搭建网站?  如何用美橙互联一键搭建多站合一网站?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  孙琪峥织梦建站教程如何优化数据库安全?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  Swift开发中switch语句值绑定模式  已有域名能否直接搭建网站?  宁波免费建站如何选择可靠模板与平台?  网站设计制作企业有哪些,抖音官网主页怎么设置?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  定制建站哪家更专业可靠?推荐榜单揭晓  北京网站制作网页,网站升级改版需要多久?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  已有域名和空间,如何快速搭建网站?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何在万网自助建站平台快速创建网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  高端云建站费用究竟需要多少预算?  建站主机数据库如何配置才能提升网站性能?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站制作模板下载什么软件,ppt模板免费下载网站?  微信小程序 input输入框控件详解及实例(多种示例)  如何快速生成ASP一键建站模板并优化安全性?  建站主机空间推荐 高性价比配置与快速部署方案解析  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站之星3.0如何解决常见操作问题?  C++中引用和指针有什么区别?(代码说明)  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  建站与域名管理如何高效结合?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何用PHP快速搭建高效网站?分步指南  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  Swift中循环语句中的转移语句 break 和 continue  Python如何创建带属性的XML节点  如何在搬瓦工VPS快速搭建网站?  如何制作一个表白网站视频,关于勇敢表白的小标题?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  ,购物网站怎么盈利呢?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站之星伪静态规则如何设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。