从Qt的版本进化中可以知道,在Qt4中的QFtp类到了Qt5中已经没有了,虽然可以通过在Qt5中自己编译出QFtp,但是Qt5中提供的QNetworkAccessManager在发送和请求网络方面有更好的兼容性和扩展性,包括ftp请求和http请求。

  这里提供一个Qt4中QFtp的源码获取方式:

git clone git://code.qt.io/qt/qtftp.git
git clone http://code.qt.io/qt/qtftp.git
git clone https://code.qt.io/qt/qtftp.git

  下面的ftp上传功实现了在有密码和无密码的情况下上传:

#include <QtCore>
#include <QtNetwork>
#include <QDebug> class Uploader: public QObject
{
Q_OBJECT
public:
Uploader(QObject *p = 0): QObject(p){ } void start(const QString &file){
// no passwd
// QUrl url("ftp://172.20.5.167/ftp.txt");
QUrl url;
url.setScheme("ftp");
url.setHost("172.20.5.167");
// 这里是设置远端主机上传时的文件名,不设置则名称为本地端上传名称
url.setPath("/ftp.txt");
url.setUserName("root");
url.setPort(21); // need passwd
/*
QUrl url("ftp://172.20.5.167/ftp.txt");
url.setScheme("ftp");
url.setUserName("root");
url.setPort(21);
*/ data = new QFile(file, this);
if (data->open(QIODevice::ReadOnly)) {
reply = nam.put(QNetworkRequest(url), data);
connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SLOT(uploadProgress(qint64, qint64)));
connect(reply, SIGNAL(finished()), SLOT(uploadDone()));
}
else
qDebug() << "Oops";
} public slots:
void uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
qDebug() << "Uploaded" << bytesSent << "of" << bytesTotal;
} void uploadDone() {
qDebug() << "Finished" << reply->error();
data->deleteLater();
reply->deleteLater();
} private:
QNetworkAccessManager nam;
QFile *data;
QNetworkReply *reply;
}; int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
// 去除ftp上传时network.ssl警告
QLoggingCategory::setFilterRules("qt.network.ssl.warning=false");
Uploader u;
u.start(QString("C:/Users/yicm/Qt/test.txt"));
return app.exec();
}
// 编译时不要漏掉下面这句
#include "main.moc"

  上面程序主要注意的地方是本地端上传文件和主机端文件,理解QUrl(无密码为ftp://root@172.20.5.167.com:21):

保证ftp地址的每一个部分都设置到位。

http://blog.csdn.net/freeape/article/details/52802163

最新文章

  1. 关于.NET知识体系结构图总结
  2. PHP Mysqli 数据库连接
  3. laravel 5.2 引入第三方类
  4. MySQL 5.7系列之sys schema(2)
  5. 初用DataGrip,连接后看不到自己创建的数据库的问题
  6. YCM安装与配置
  7. activemq重启
  8. onekey_fourLED
  9. sonar tomacat配置
  10. 《HelloGitHub》第 17 期
  11. 什么是5G,看了这篇文章你就彻底懂了
  12. tensorflow 使用 5 mnist 数据集, softmax 函数
  13. 《玩转Django2.0》读书笔记-Django配置信息
  14. Nginx详解三:Nginx基础篇之yum安装
  15. 3ds max学习笔记(十三)-- (锥化,扭曲,晶格)
  16. 图解Fiddler如何抓取Android数据包
  17. Linux crontab命令详解
  18. Javascript设计模式理论与实战:简单工厂模式
  19. [Alpha]Scrum Meeting#7
  20. LeetCode 100.相同的树(C++)

热门文章

  1. 【t071】最长路
  2. [转载]Android Studio卡在refreshing gradle project的原因和快速解决办法
  3. JS事件处理函数中return false到底是什么东西
  4. UVa 12657 Boxes in a Line(应用双链表)
  5. 转载:Adb远程连接Android系统(通过网络使用ADB(Connect to android with wifi))
  6. hdu 3966 树链分割第一3遍
  7. Ado.net连接字符串
  8. 简明Python3教程 8.控制流
  9. 跟我学ASP.NET MVC之十:SportsStrore安全
  10. mysqldump 定时备份数据(全量)