安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
实验四:FTP:ftpTestTool
实验时间:实验地点: A603
一、实验目的
1.了解Qt使用QNetworkAccessManager进行ftp编程的基本方法 2.熟悉用QNetworkAccessManager进行ftp编程的注意事项 3.熟悉QNetworkAccessManager、QNetworkRequest、QNetworkReply和QUrl这四个类,以及它们的相互关系
二、实验内容
1.使用QNetworkAccessManager、QNetworkRequest、QNetworkReply和QUrl这四个类创建一个ftp访问器
三、实验要求
1.实现ftp 的登陆
四、实验步骤
1.使用QT应用程序向导创建GUI工程 2.使用QT Designer设计图形用户界面 ? 拖曳一个“按钮”控件
第38页共61页
面向对象程序设计:实验报告
安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
? 调整布局 ? 设置其属性
? 右键“按钮”控件,选择“转到槽”,在弹出的编辑界面中输入槽函数代码
3.使用编辑界面编写代码,通过代码再添加一个“按钮”控件,及其相应的槽函数 4.编译,运行
五、实验源码
main.cpp
#include\
#include
intmain(intargc,char*argv[]) {
QApplicationa(argc,argv); Widgetw; w.show();
returna.exec(); }
widget.h
#ifndefWIDGET_H #defineWIDGET_H
#include
#include
第39页共61页
面向对象程序设计:实验报告
安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
#include
#include
classWidget:publicQWidget {
Q_OBJECT
public:
Widget(QWidget*parent=0); ~Widget();
protectedslots: voidonGet();
voidonMetaDataChanged();
voidonDownloadProgress(qint64received,qint64total); voidonReadyRead();
voidonError(QNetworkReply::NetworkErrorcode); voidonFinished();
voidonAuthenticationRequired(QNetworkReply*reply, QAuthenticator*authenticator);
private:
voidresetState();
voiddisableControls(); voidenableControls();
QStringrequestString(QNetworkRequest*req); QStringresponseString(QNetworkReply*reply); boolopenFile(boolsave,QString&errorString);
private:
QLineEdit*m_userEdit;
QLineEdit*m_passwordEdit; QLineEdit*m_urlEdit;
QPushButton*m_getButton; QProgressBar*m_progress; QTextEdit*m_state;
QNetworkAccessManager*m_nam; QNetworkReply*m_reply; QStringm_strFilePath; QFile*m_file; QStringm_user;
QStringm_password;
第40页共61页
面向对象程序设计:实验报告
安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
};
#endif//WIDGET_H
widget.cpp
#include\ #include
#include
#include
Widget::Widget(QWidget*parent):QWidget(parent) ,m_nam(0),m_reply(0),m_file(0) {
QGridLayout*layout=newQGridLayout(this); QLabel*label=newQLabel(\);
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
layout->addWidget(label,0,0,Qt::AlignRight|Qt::AlignVCenter); m_userEdit=newQLineEdit();
layout->addWidget(m_userEdit,0,1);
label=newQLabel(\);
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
layout->addWidget(label,1,0,Qt::AlignRight|Qt::AlignVCenter); m_passwordEdit=newQLineEdit();
layout->addWidget(m_passwordEdit,1,1);
label=newQLabel(\);
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
layout->addWidget(label,2,0,Qt::AlignRight|Qt::AlignVCenter); m_urlEdit=newQLineEdit();
layout->addWidget(m_urlEdit,2,1);
m_getButton=newQPushButton(\);
connect(m_getButton,SIGNAL(clicked()),this,SLOT(onGet()));
layout->addWidget(m_getButton,3,1,Qt::AlignRight|Qt::AlignVCenter);
第41页共61页
面向对象程序设计:实验报告
安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
m_progress=newQProgressBar(); m_progress->setRange(0,100);
layout->addWidget(m_progress,4,0,1,2);
m_state=newQTextEdit();
m_state->setReadOnly(true);
layout->addWidget(m_state,5,0,1,2);
layout->setRowStretch(5,1); layout->setColumnStretch(1,1); }
Widget::~Widget() { }
voidWidget::onGet() {
disableControls(); m_state->clear();
m_progress->setValue(0);
m_user=m_userEdit->text();
m_password=m_passwordEdit->text();
QStringstrURL=m_urlEdit->text(); QUrlqurl(strURL);
qurl.setUserName(m_user);
qurl.setPassword(m_password); QNetworkRequestreq(qurl);
m_strFilePath=QFileDialog::getSaveFileName(this);
QStringerrorString;
if(!openFile(true,errorString)) {
QMessageBox::warning(this,tr(\) ,errorString
,QMessageBox::Ok); resetState(); return; }
第42页共61页
面向对象程序设计:实验报告