QT上实现FTP传输

QT上实现FTP传输

项目开发中,需要使用到FTP协议进行文件传输,现有QT自带的库中支持FTP传输的为 QNetworkAccessManager,虽然此类可以实现 Ftp 的上传/下载功能,但有的功能 QNetworkAccessManager 却没有提供,例如:list、cd、remove、mkdir、rmdir、rename 等。这种情况下,就不得不使用 QFtp,只需要下载源码自行编译即可使用。

QFtp的使用

首先从 GitHub 下载 QFtp:
https://github.com/qt/qtftp
完成之后,可以看到 qtftp 中包含源码及示例。
下载下来的源码

配置

下面,以 MSVC为例。
打开 src/qftp/qftp.pro,将默认配置:
CONFIG += static
CONFIG -= shared
改为:
CONFIG += staticlib
CONFIG += shared
这样,生成 *.dll 的同时也会生成 .lib。
编译 QFtp,完成之后会在 lib 文件夹下生成 .lib、.dll、
.prl 文件。

生成的库文件

• 将 Qt5Ftpd.lib、Qt5Ftp.lib、Qt5Ftpd.prl、Qt5Ftp.prl 拷贝至 D:\Qt\Qt5.5.1\5.5\msvc2013\lib。
• 将 Qt5Ftpd.dll、Qt5Ftp.dll 拷贝至 D:\Qt\Qt5.5.1\5.5\msvc2013\bin。
• 将 qftp.h、qurlinfo.h 拷贝至 D:\Qt\Qt5.5.1\5.5\msvc2013\include\QtNetwork,并新建一个名为 QFtp 的文件(没有后缀名),然后写入 #include “qftp.h”。
完成之后,就可以使用 QFtp 了。

库的添加使用

  1. QFtp 异步工作,因此没有阻塞函数。如果无法立即执行操作,函数仍将立即返回,并且该操作将被调度以供以后执行。调度操作的结果通过信号报告,这种方法依赖于事件循环操作。
  2. 可以调度的操作(也被称为“命令”)有:connectToHost()、login()、close()、list()、cd()、get()、put()、remove()、mkdir()、rmdir()、rename() 和 rawCommand()。
    所有这些命令都会返回一个唯一的标识符,允许跟踪当前正在执行的命令。当命令的执行开始时,发出带有命令标识符的 commandStarted() 信号。当命令完成时,会发出 commandFinished() 信号,并带有命令标识符和一个 bool 参数,表明该命令在完成时是否出错。
    3.使用示例
    在 pro 中添加 QFtp 库:
    CONFIG(debug, debug|release) {
    LIBS += -lQt5Ftpd
    } else {
    LIBS += -lQt5Ftp
    }

例如,如果要连接并登录到 FTP 服务器,这是简单的实现:
#include
QFtp ftp = new QFtp(parent);
ftp->connectToHost("192.168.
**.***", 21); // 主机:192.168.***.*** 端口号:21
ftp->login(“test”, “123456”); // 用户名:test 密码:123456

首先使用 connectToHost() 连接 FTP 服务器,然后通过 login() 登录到 FTP 服务器。登录成功之后,就可以调度其他操作(例如:list()、cd()、get()、put()、remove()、mkdir()、rmdir()、rename() 和 rawCommand())了。

改善QT发布方式的探讨

目前QT中添加第三方开源QT库的方式为:

如上图所示.添加开源QT库至开发环境需要的步骤为:
①获取开源库的源码
②配置编译开源库的编译环境
③生成dll与lib文件
④配置自定义工程编译环境
⑤添加开源库编译生成的头文件、dll与lib文件
⑥自定义工程编译
此方式添加第三方开源QT库要求的环境配置复杂,且可移植性和兼容性差,新建开发环境进行调用开源库时,都需要重复以上步骤,才可正常使用

流程图

程序的发布步骤为(图一):
由于静态编译库中一般未包含,第三方库,所以只能使用关联指令(windeployqt指令),获取依赖文件后,才可正常打包发布,步骤不够智能化

改善后的步骤(图二):

  1. 获取第三方开源库源码
  2. 在自定义的QT工程中的.pro文件里添加库的源码以及pri路径
  3. 在源码中包含头文件
  4. 至此库添加完成.且可直接使用QT的静态编译器,进行编译发布

此方法,适用于所有基于QT工程源库,只要开源库中含有.pri文件.在自定义QT工程只需要添加pri文件和库源码即可完成第三方库的添加,去除了第三方库编译的复杂配置,且实现了QT静态库的编译发布,提高了自定义QT工程的兼容性和可移植性

流程图一

流程图二

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值