qt5.2访问ftp服务器

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

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

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

QT       += network

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

#include <qstring.h>
#include <qfile.h>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "qdebug.h"
#include <QtGui>

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)用于显示下载内容


猜你喜欢

转载自blog.csdn.net/fuyoufang1/article/details/18215081