16,816
社区成员




#include "ftpclient.h"
#include "ui_ftpclient.h"
#include <QString>
#include <QMessageBox>
#include <QtGui>
FtpClient::FtpClient(QWidget *parent) :
QDialog(parent),
ui(new Ui::FtpClient)
{
ui->setupUi(this);
LabelServer=new QLabel(tr("服务器:")); //192.168.108.6
LabelUser=new QLabel(tr("用户名:"));
LabelPassword=new QLabel(tr("密码:")); //ft4w685Y
PushButtonLogin=new QPushButton;
PushButtonPut=new QPushButton;
PushButtonGet=new QPushButton;
PushButtonLogin->setText(tr("登录"));
PushButtonPut->setText(tr("上传"));
PushButtonGet->setText(tr("下载"));
LineEditServer=new QLineEdit;
QHBoxLayout *layout1=new QHBoxLayout;
layout1->addWidget(LabelServer);
layout1->addWidget(LineEditServer);
LineEditUser=new QLineEdit;
QHBoxLayout *layout2=new QHBoxLayout;
layout2->addWidget(LabelUser);
layout2->addWidget(LineEditUser);
LineEditPassword=new QLineEdit;
QHBoxLayout *layout3=new QHBoxLayout;
layout3->addWidget(LabelPassword);
layout3->addWidget(LineEditPassword);
QHBoxLayout *layout4=new QHBoxLayout;
layout4->addWidget(PushButtonPut);
layout4->addWidget(PushButtonGet);
QVBoxLayout *mainlayout=new QVBoxLayout;
mainlayout->addLayout(layout1);
mainlayout->addLayout(layout2);
mainlayout->addLayout(layout3);
mainlayout->addWidget(PushButtonLogin);
mainlayout->addLayout(layout4);
setLayout(mainlayout);
PushButtonPut->setEnabled(false);
PushButtonGet->setEnabled(false);
connect(PushButtonLogin,SIGNAL(clicked()),this,SLOT(slotLogin()));
connect(PushButtonPut,SIGNAL(clicked()),this,SLOT(slotPut()));
connect(PushButtonGet,SIGNAL(clicked()),this,SLOT(slotGet()));
}
FtpClient::~FtpClient()
{
delete ui;
}
void FtpClient::slotLogin()
{
QString serverAddress = LineEditServer->text();
if(serverAddress.isEmpty())
{
QMessageBox::warning(this,tr("error"),tr("Please input server address!"));
return;
}
QString userName=LineEditUser->text();
if(userName.isEmpty())
{
QMessageBox::warning(this,tr("error"),tr("Please input user name!"));
return;
}
QString password=LineEditPassword->text();
ftpClient=new QFtp();
ftpClient->connectToHost(serverAddress);
connect(ftpClient,SIGNAL(stateChanged(int)),this,SLOT(slotStateChanged(int)));
connect(ftpClient,SIGNAL(done(bool)),this,SLOT(slotDone(bool)));
ftpClient->login(userName,password);
curStatus=LOGIN;
}
void FtpClient::slotStateChanged(int state)
{
if(state==QFtp::LoggedIn)
{
PushButtonPut->setEnabled(true);
PushButtonGet->setEnabled(true);
}
}
void FtpClient::slotPut()
{
bool ok;
QString fileName=QInputDialog::getText(this,tr("Put File:"),
tr("Please input file name:"),QLineEdit::Normal,QString(),&ok);
if(ok&&!fileName.isEmpty())
{
QFile *remoteFileName=new QFile(fileName);
ftpClient->put(remoteFileName,fileName);
// QFile *dataFile=new QFile("filename");
// dataFile->open(QIODevice::ReadOnly);
// ftpClient->put(dataFile,"filename");
}
curStatus=PUT;
}
void FtpClient::slotGet()
{
bool ok;
QString fileName=QInputDialog::getText(this,tr("Get File:"),
tr("Please input file name:"),QLineEdit::Normal,QString(),&ok);
if(ok&&!fileName.isEmpty())
{
localFile=new QFile(fileName);
localFile->open(QIODevice::WriteOnly);
ftpClient->get(fileName,localFile);
}
curStatus=GET;
}
void FtpClient::slotDone(bool error)
{
if(error)
{
QMessageBox::warning(this,tr("error"),ftpClient->errorString());
return;
}
if(curStatus==LOGIN)
{
PushButtonLogin->setEnabled(false);
curStatus=None;
}
if(curStatus==PUT)
{
QMessageBox::warning(this,tr("succeed"),tr("Put file succeed!"));
curStatus=None;
}
if(curStatus==GET)
{
localFile->close();
QMessageBox::warning(this,tr("succeed"),tr("Get file succeed!"));
curStatus=None;
}
}