Qt5调用QFtp函数

不知怎么,在Qt5以上版本没有了QFtp,不过可以用QNetworkAccessManager.我在网上也找了些资料,最后还是决定先暂时用QFtp…
这篇博客讲解的很详细
http://blog.csdn.net/liang19890820/article/details/53304049

下载QFtp源码

git clone https://github.com/qt/qtftp.git

修改配置

  • 进入qtftp/src/qftp,有个

    qftp.pro

    ,修改为

    CONFIG += static #生成 .a静态链接库
    CONFIG += shared #生成.so动态链接库

编译

进入qtftp根目录,编译生成库文件

cd qtftp
qmake
make

然后在 qtftp/lib 下生成了一些目录文件,大概是这样

cmake/ libQt5Ftp.la libQt5Ftp.so libQt5Ftp.so.5.0 pkgconfig/
libQt5Ftp.a libQt5Ftp.prl libQt5Ftp.so.5 libQt5Ftp.so.5.0.0

整合文件

把这些零散的文件整合成一个便于调用的库,还是非常有必要的
这里我创建一个 libqtftp 文件夹,用来存放所需要的文件

然后在刚才在 qtftp 目录下的 lib , include , src
文件夹复制到 libqtftp 目录

  • 进入 include/QtFtp 文件夹,删除 headers.pri,同时把 src 文件夹内:
    qftp.cpp
    qftp.h
    qurlinfo.cpp
    qurlinfo.h
    .moc文件夹内3个文件复制到上一层文件夹 (隐藏文件夹)
    .obj + .pch (隐藏文件夹)

一并复制到 include/QtFtp 文件夹,这时可删除 src 文件夹

  • 修改 moc_qftp.cpp 代码 #include "../qftp.h"#include "qftp.h"
  • 为了便于管理,在 libqtftp 目录下创建一个 .pri文件:

qtftp.pri:

1
2
3
4
5
6
7
8
#QT += network
HEADERS += $$PWD/include/QtFtp/\
$$PWD/include/QtFtp/QFtp\
$$PWD/include/QtFtp/QUrlInfo\
$$PWD/include/QtFtp/QtFtpVersion
SOURCES += $$PWD/include/QtFtp/qftp.cpp\
$$PWD/include/QtFtp/qurlinfo.cpp
INCLUDEPATH += $$PWD/include/

引用库

首先,新建一个Qt项目,把 libqtftp 文件夹放到 Qt项目下.
然后在修改 项目.pro 文件

1
2
3
4
5
6
7
8
9
10
11
QT       += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyFtp
TEMPLATE = app
include($$PWD/libqtftp/qtftp.pri)
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += $$PWD/libqtftp/include/
LIBS += -L$$PWD/libqtftp/lib/ -lQt5Ftp

要注意那个配置:

  • QT += network
  • include($$PWD/libqtftp/qtftp.pri)
  • INCLUDEPATH += $$PWD/libqtftp/include/
  • LIBS += -L$$PWD/libqtftp/lib/ -lQt5Ftp
    链接libQt5Ftp.so动态链接库

之后 重新构建项目

例子

使用前需要包含头文件

1
2
#include"QtFtp/QFtp"
#include<QtFtp/QUrlInfo>

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// do something ...
QFtp * ftp =new QFtp(this);
connect(ftp,&QFtp::listInfo,this,[=](const QUrlInfo u){
// do something ...
});
connect(ftp,&QFtp::dataTransferProgress,[=](qint64 _t1, qint64 _t2){
// do something ...
});
connect(ftp,&QFtp::readyRead,this,[=](){
// do something ...
});
int id=ftp->connectToHost("");
ftp->login("","");
ftp->cd("");
ftp->list();
ftp->close();
// do something ...

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!