#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QFtp;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void ftpCommandStarted(int);
void ftpComandFinished(int, bool error);
private:
QFtp *ftp;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "qftp.h"
#include <QFile>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
ftp = new QFtp(this);
ftp->connectToHost("192.168.1.1",21); //服务器FTP站点绑定的IP地址,端口号(默认21)
ftp->login("edge","1");//用户名,密码
//这些命令函数都会返回一个唯一ID号,使用这些ID区分不同的命令
ftp->get("5555.tif");//从服务器下载指定文件
ftp->close();
//每当开始执行一个命令时,都会发射 commandStarted()函数信号,当命令执行结束时,会发射commandFinished()函数信号
connect(ftp, &QFtp::commandStarted, this, &MainWindow::ftpCommandStarted);
connect(ftp, &QFtp::commandFinished, this, &MainWindow::ftpComandFinished);
}
MainWindow::~MainWindow()
{
}
void MainWindow::ftpCommandStarted(int)
{
int id = ftp->currentCommand();
switch (id){
case QFtp::ConnectToHost:
qDebug() << QString::fromLocal8Bit("正在连接到服务器·..");
break;
case QFtp::Login:
qDebug() << QString::fromLocal8Bit("正在登录··.");
break;
case QFtp::Get :
qDebug() << QString::fromLocal8Bit("正在下载·..");
break;
case QFtp::Close :
qDebug() << QString::fromLocal8Bit("正在关闭连接··.");
}
}
void MainWindow::ftpComandFinished(int, bool error)
{
if(ftp->currentCommand()== QFtp::ConnectToHost){
if (error){
qDebug() << QString::fromLocal8Bit("连接服务器出现错误") << ftp->errorString();
}else{
qDebug() << QString::fromLocal8Bit("连接到服务器成功");
}
}else if(ftp->currentCommand() == QFtp::Login){
if(error){
qDebug() << QString::fromLocal8Bit("登录出现错误") << ftp->errorString();
}else{
qDebug() << QString::fromLocal8Bit("登录成功");
}
}else if (ftp->currentCommand() == QFtp::Get){
if(error){
qDebug() << QString::fromLocal8Bit("下载出现错误") << ftp->errorString();
}
else{
qDebug() << QString::fromLocal8Bit("已经完成下载");
QFile file("iki.jpg");
if(!file.open(QIODevice::WriteOnly)){
qDebug() << "222";
return;
}
file.write(ftp->readAll());
file.close();
}
}else if(ftp->currentCommand() == QFtp::Close){
qDebug() << QString::fromLocal8Bit("已经关闭连接");
}
}