QFtp 协议下载
来源:互联网 发布:mac number 下拉菜单 编辑:程序博客网 时间:2024/05/20 20:58
出自Qt creator 快速入门,
效果如图
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class QFtp;// 以下代码在例程18-4中添加#include <QHash>class QFile;class QUrlInfo;class QTreeWidgetItem;namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: Ui::MainWindow *ui; QFtp *ftp; // 以下代码在例程18-4中添加 // 用来存储一个路径是否为目录的信息 QHash<QString, bool> isDirectory; // 用来存储现在的路径 QString currentPath; // 用来表示下载的文件 QFile *file;private slots: void ftpCommandStarted(int); void ftpCommandFinished(int, bool); // 以下代码在例程18-4中添加 // 更新进度条 void updateDataTransferProgress(qint64, qint64 ); // 将服务器上的文件添加到Tree Widget部件中 void addToList(const QUrlInfo &urlInfo); // 双击一个目录时显示其内容 void processItem(QTreeWidgetItem*, int); void on_connectButton_clicked(); void on_cdToParentButton_clicked(); void on_downloadButton_clicked();};#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFtp>#include <QFile>#include <QTreeWidgetItem>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->progressBar->setValue(0); connect(ui->fileList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(processItem(QTreeWidgetItem*, int)));}MainWindow::~MainWindow(){ delete ui;}void MainWindow::ftpCommandStarted(int){ int id = ftp->currentCommand(); switch (id) { case QFtp::ConnectToHost : ui->label->setText(tr("正在连接到服务器…")); break; case QFtp::Login : ui->label->setText(tr("正在登录…")); break; case QFtp::Get : ui->label->setText(tr("正在下载…")); break; case QFtp::Close : ui->label->setText(tr("正在关闭连接…")); }}void MainWindow::ftpCommandFinished(int, bool error){ if(ftp->currentCommand() == QFtp::ConnectToHost) { if (error) ui->label->setText(tr("连接服务器出现错误:%1").arg(ftp->errorString())); else ui->label->setText(tr("连接到服务器成功")); } else if (ftp->currentCommand() == QFtp::Login) { if (error) ui->label->setText(tr("登录出现错误:%1").arg(ftp->errorString())); else { ui->label->setText(tr("登录成功")); ftp->list(); } } else if (ftp->currentCommand() == QFtp::Get) { if(error) ui->label->setText(tr("下载出现错误:%1").arg(ftp->errorString())); else { ui->label->setText(tr("已经完成下载")); file->close(); } ui->downloadButton->setEnabled(true); } else if (ftp->currentCommand() == QFtp::List) { if (isDirectory.isEmpty()) { ui->fileList->addTopLevelItem( new QTreeWidgetItem(QStringList()<< tr("<empty>"))); ui->fileList->setEnabled(false); ui->label->setText(tr("该目录为空")); } } else if (ftp->currentCommand() == QFtp::Close) { ui->label->setText(tr("已经关闭连接")); }}// 连接按钮void MainWindow::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, bool)), this, SLOT(ftpCommandFinished(int, bool))); connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(addToList(QUrlInfo))); connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)), //下载进度 this, SLOT(updateDataTransferProgress(qint64, qint64))); QString ftpServer = ui->ftpServerLineEdit->text(); QString userName = ui->userNameLineEdit->text(); QString passWord = ui->passWordLineEdit->text(); ftp->connectToHost(ftpServer, 21); //默认端口21 ftp->login(userName, passWord);}void MainWindow::addToList(const QUrlInfo &urlInfo){ QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, urlInfo.name()); item->setText(1, QString::number(urlInfo.size())); item->setText(2, urlInfo.owner()); item->setText(3, urlInfo.group()); item->setText(4, urlInfo.lastModified().toString("MMM dd yyyy")); QPixmap pixmap(urlInfo.isDir() ? "../myFTP/dir.png" : "../myFTP/file.png"); item->setIcon(0, pixmap); isDirectory[urlInfo.name()] = urlInfo.isDir(); ui->fileList->addTopLevelItem(item); if (!ui->fileList->currentItem()) { ui->fileList->setCurrentItem(ui->fileList->topLevelItem(0)); ui->fileList->setEnabled(true); }}void MainWindow::processItem(QTreeWidgetItem *item, int){ QString name = item->text(0); // 如果这个文件是个目录,则打开 if (isDirectory.value(name)) { ui->fileList->clear(); isDirectory.clear(); currentPath += "/"; currentPath += name; ftp->cd(name); ftp->list(); ui->cdToParentButton->setEnabled(true); }}// 返回上级目录按钮void MainWindow::on_cdToParentButton_clicked(){ ui->fileList->clear(); isDirectory.clear(); currentPath = currentPath.left(currentPath.lastIndexOf('/')); if (currentPath.isEmpty()) { ui->cdToParentButton->setEnabled(false); ftp->cd("/"); } else { ftp->cd(currentPath); } ftp->list();}// 下载按钮void MainWindow::on_downloadButton_clicked(){ QString fileName = ui->fileList->currentItem()->text(0); file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { delete file; return; } ui->downloadButton->setEnabled(false); ftp->get(ui->fileList->currentItem()->text(0), file); //get请求 下载 ,}void MainWindow::updateDataTransferProgress(qint64 readBytes,qint64 totalBytes){ ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(readBytes);}
main.cpp
#include <QtGui/QApplication>#include "mainwindow.h"#include <QTextCodec>int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); MainWindow w; w.show(); return a.exec();}
- QFtp 协议下载
- Qt---QFtp上传、下载二进制文件
- QFtp
- 使用qftp或者qhttp下载文件
- 基于QFtp类的上传、下载客户端
- QT QFtp使用实例 从FTP下载一个文件
- QFtp学习
- 最近在写个自动下载数据的软件,发现QT的QFtp不大好用
- QFTP的配置使用以及避免下载文件为0kb的注意事项
- Qt中的QFtp类
- QFtp 与中文问题
- QFtp的使用
- Qt5加载QFtp
- Qt5编译使用QFtp
- Qt之QFtp
- 用Qt5编译QFtp
- Qt之QFtp
- 3GPP协议下载
- 图像处理中的梯度、导数如何求?(Robert算子,Sobel算子,Prewitt算子,Laplace算子)
- DCOM/OPC配置
- robotium测试创建java文件和junit文件区别
- OD条件与消息断点的设置方法
- Android 4.3 新特性
- QFtp 协议下载
- 关于Java中的匿名内部类
- Centos 6.3 编译安装Nginx+php+Mysql
- ARC 类型转换:显示转换 id 和 void *
- shell脚本加密
- LaTex中表格固定列宽并且居中的方法
- C#调用REST API
- 这位程序员桌面很干净
- uboot/board/mini2440/conifg.mk 之TEXT_BASE