使用QFtp类,实现FTP客户端的登录、上传、下载、删除、创建文件夹、返回等基础功能

1、介绍

FTP是基于TCP/IP的一种应用层文件传输协议,通过建立FTP服务器(默认端口21)-客服端的形式在各个主机间传输文件。

Qt5.0之后移除了QFtp类(基于FTP协议实现的一个类),使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,后者在性能上和稳定性上有所提升。但有些原本 QFtp 有的功能 QNetworkAccessManager 却没有提供,例如:list、cd、remove、mkdir、rmdir、rename 等,前者的功能更加完善,提供的API更多,更加便于开发者使用。最为新手练习或者开发FTP相关功能和一般的应用,当然选择QFtp更加有利。

使用QFtp只需要把编译好的类文件添加到项目中即可,Qftp类文件下载地址:

百度网盘链接: https://pan.baidu.com/s/1nbuKK6Tv35RowRsXwpuWUw?pwd=5suc

2、准备

1、需要已经配置好的FTP服务器

2、工程文件中需要添加 

QT += network

设计图

文件结构,其中红框圈住的是新增的项目文件,qftp和qurlinfo是添加进入项目的Qftp类文件。

3、功能要点

1、登陆模式设置成被动连接,否则连接服务器和登录会异常

m_ftp->setTransferMode(QFtp::TransferMode::Passive);

2、treeWidget的右键菜单出现位置,需要特殊处理,不可以直接使用pos,pos位置并不是鼠标实际显示的位置。

//校正鼠标点的位置,保证菜单出现在鼠标点击的位置
    QPoint localPnt = ui->treeWidget->viewport()->mapToGlobal(pos);
    pMenu->exec(localPnt);

3、ftp服务器上文件路径地址的问题。登陆成功默认进入ftp服务器文件夹的根目录,根据用户操作来确定所进入的文件夹和目录地址,所以可以添加变量来确定当前文件所在目录。

4、完整代码

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QTreeWidget>
#include "qftp.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void closeEvent(QCloseEvent *event) override;
private:
    void InitSlot();
    //登录ftp服务器
    void Login();
    //操作提示
    void OperationInfo(const QString& info,QMessageBox::Icon icon);
    //修改按钮状态
    void ActionStatus(bool enable);
private slots:
    //响应命令开始
    void OnFtpCommandStart(int commandId);
    //响应命令结束
    void OnFtpCommandFinished(int commandId,bool isError);
    //响应展示文件列表
    void OnAddListInfo(const QUrlInfo& urlInfo);
    //响应进度条
    void OnUpdateProgress(qint64 readBytes,qint64 totalBytes);
    //响应返回上一级
    void OnActionBackToParent();
    //响应上传信号
    void OnActionUpload();
    //响应下载信号
    void OnActionDowload();
    //响应获取文件列表操作
    void OnActionList();
    //响应新建操作
    void OnActionNewFile();
    //响应删除操作
    void OnActionRemove();
    //响应treeWidget点击Item事件
    void OnTreeWidgetItemActived(QTreeWidgetItem *item, int column);
    //响应treeWidget右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值