qt5 ftp服务器 文件夹,qt5.2访问ftp服务器

在网上看到很多用QFtp类的实例,但是Qt5中已经没有了去掉了这个类,原因是和QNetworkAccessManager 的功能重复。

下面介绍用QNetworkAccessManager 类是实现访问ftp的方法。

1.在工程文件.pro文件当中加入

QT += network

2.mainwindow.h当中添加如下几个头文件

#include #include #include #include #include #include #include "qdebug.h"

#include

3.

mainwindow.h

当中添加私有槽

private slots:

void slotError(QNetworkReply::NetworkError code);

void replyFinished(QNetworkReply *reply);

4.

mainwindow.h

当中添加自由成员

private:

Ui::MainWindow *ui;

QNetworkAccessManager *manager;

QNetworkReply *reply;

5.在mainwindow.cpp文件当中的初始化函数当中添加如下代码

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QUrl url; //该QUrl类提供了一个方便的接口,用于处理URL

url.setScheme("ftp");//设置该计划描述了URL的类型(或协议)

url.setHost("192.168.1.29");//设置主机地址

url.setPath("/test.txt");//设置URL路径。该路径是自带权限后的URL的一部分,但在查询字符串之前

url.setPort(21);//设置URL的端口。该端口是URL的权限的一部分,如setAuthority(描述)。端口必须是介于0和65535(含)。端口设置为-1表示该端口是不确定的。

url.setPassword("userPassword"); //设置ftp用户密码

url.setUserName("userName");//设置tfp用户名

QNetworkRequest request;//该QNetworkReply类包含的数据和标题,对QNetworkAccessManager发送请求

request.setUrl(url); //这只request的请求

manager = new QNetworkAccessManager;//QNetworkAccessManager 允许发送网络请求和接收回复

reply = manager->get(request);//发送请求,以获得目标要求的内容,并返回一个新的QNetworkReply对象打开阅读,每当新的数据到达发射的readyRead()信号。要求的内容以及相关的头文件会被下载。

//连接信号从发送对象到该对象的方法。相当于连接(发件人,信号,接收方,方法,类型)。

//每个连接都会发射信号,所以复制连接发会出两个信号。可以使用disconnect()断开了连接。

connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

}

6.在mainwindow.cpp文件当中添加两个接收信号的函数

void MainWindow::slotError(QNetworkReply::NetworkError code)

{

qDebug() << reply->errorString();

}

void MainWindow::replyFinished(QNetworkReply *reply) //当回复结束后

{

//****************ftp********

QTextCodec *codec = QTextCodec::codecForName("utf8");

//使用utf8编码,这样才可以显示中文

QString all = codec->toUnicode(reply->readAll());

ui->lab_ftp->setText(all);

reply->deleteLater(); //最后要释放reply对象

}

7

.在mainwindow.ui文件中添加lable (id为lab_ftp)用于显示下载内容