QT学习(网络)
FTP
FTP的主要作用,就是让用户连接上一个远程计算机,查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或者把本地计算机的文件送到远程计算机上。
注意:
我使用的是QT5.11.2,里面没有FTP的相关头文件,所以使用前记得根据以下链接配置!!!
链接: Qt5使用QFtp类库的操作过程.
进入代码:
***.pro
QT += core gui network
CONFIG(debug,debug|release){
LIBS += -lQt5Ftpd
}else{
LIBS += -lQt5Ftp
}
#这是我的qt地址
LIBS += -LD:/qt/QT/5.11.2/msvc2015_64/lib
界面:
***.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFtp>
#include <QLabel>
#include <QtGui>
#include <QTreeWidgetItem>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_downloadButton_clicked();
void on_cdToParentButton_clicked();
void on_connectButton_clicked();
void ftpCommandStarted(int);
void ftpCommandFinished(int,bool);
void updateDataTransferProgress(qint64,qint64 );//更新进度条
//将服务器上的文件添加到Tree Widget中
void addToList(const QUrlInfo &urlInfo);
void processItem(QTreeWidgetItem*,int);//双击一个目录时显示其内容
private:
Ui::Widget *ui;
QHash<QString, bool> isDirectory; //用来存储一个路径是否为目录的信息
QString currentPath; //用来存储现在的路径
QFile *file;
QFtp *ftp;
};
#endif // WIDGET_H
***.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
//鼠标双击列表中的目录时,我们进入该目录
connect(ui->fileList,SIGNAL(itemActivated(QTreeWidgetItem*,int)),
this,SLOT(processItem(QTreeWidgetItem*,int)));
}
Widget::~Widget()
{
delete ui;
}
/*****************************************************************************
我们在“连接”按钮的单击事件槽函数中新建了ftp对象,然后关联了相关的信号和槽。
这里的listInfo()信号由ftp->list()函数发射,它将在登录命令完成时调用,
下面我们提到。而dataTransferProgress()信号在数据传输时自动发射。
最后我们从界面上获得服务器地址,用户名和密码等信息,并以它们为参数执行连接和登录命令。
****************************************************************************/
void Widget::on_connectButton_clicked() //连接按钮
{
ui->fileList->clear();
currentPath.clear();
isDirectory.clear();
ftp = new QFtp(this);
connect(ftp,SIGNAL(commandStarted(int)),
this,SLOT(ftpCommandStarted(int)));
connect(ftp,SIGNAL(commandFinished(int,