使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,但它没有提供例如list、cd、remove、mkdir、rmdir、rename 等功能。这种情况下,我们可以使用QFtp,需要下载源码、编译并处理一些坑。
从 GitHub 下载 QFtp:
https://html" target="_blank">github.com/qt/qtftp
用qtcreator打开qftp/qftp.pro,编译生成库文件。
我以Qt5.5.1为例说明,其它版本类似
CONFIG(debug, debug|release) { LIBS += -lQt5Ftpd } else { LIBS += -lQt5Ftp }
也就是说,ftp的加载方式还不能与Qt5的原生库完全一致,如何做到这一点,我还需要时间研究。
修正进度条的提前显示,对progressDialog新对象进行如下设置,去掉了取消操作,取消操作有问题,暂时屏蔽。
progressDialog = new QProgressDialog("download...", nullptr, 0, 100, this); progressDialog->setWindowModality(Qt::WindowModal); auto winFlags = windowFlags() & ~Qt::WindowMinMaxButtonsHint; progressDialog->setWindowFlags(winFlags &~ Qt::WindowCloseButtonHint); //去掉窗口的默认按钮 progressDialog->reset(); //避免提前显示 progressDialog->setAutoClose(false); progressDialog->setAutoReset(false);
屏蔽取消按钮的消息链接。
//connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
支持多文件下载
首先,在QTreeWidget生成后,设置其可以选中多行。
fileList->setSelectionMode(QAbstractItemView::ExtendedSelection);
修改downloadFile函数,支持多文件下载。
QList<QTreeWidgetItem*> selectedItemList = fileList->selectedItems(); for (int i = 0; i < selectedItemList.size(); i++) { QString fileName = selectedItemList[i]->text(0); if (QFile::exists(fileName)) { QMessageBox::information(this, tr("FTP"), tr("There already exists a file called %1 in the current directory.").arg(fileName)); return; } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { QMessageBox::information(this, tr("FTP"), tr("Unable to save the file %1: %2.").arg(fileName).arg(file->errorString())); delete file; return; } ftp->get(fileName, file); progressDialog->setLabelText(tr("Downloading %1...").arg(fileName)); downloadButton->setEnabled(false); progressDialog->exec(); }
项目地址
https://github.com/zhoutk/qtDemo
命令行编译
git clone https://github.com/zhoutk/qtDemo cd qtDemo/qftp & mkdir build & cd build cmake .. cmake --build .
编译时注意:cmake默认为x86架构,需要与你安装的Qt版本对应;编译好了,运行前,请注意目录结构是否正确。
上面是正统方法在qt5中使用qftp,还可以直接把其源代码纳入你的应用项目中,因为一共只有四个文件,稍作修改就可以使用。我发现该项目的问题,主要是cancelDownload会出让程序崩溃,感觉问题出在本地文件已经被清除,还有后续的数据到来,结果就异常了。有时间再来研究,看能不能把协议学透,自己造个轮子出来。
到此这篇关于QT5编译使用QFtp的方法步骤的文章就介绍到这了,更多相关QT5编译使用QFtp内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
介绍 我不会告诉你怎么在自己的电脑上去构建、安装一个定制化的 Linux 内核,这样的资料太多了,它们会对你有帮助。本文会告诉你当你在内核源码路径里敲下 make 时会发生什么。 当我刚刚开始学习内核代码时,Makefile 是我打开的第一个文件,这个文件看起来真令人害怕 :)。那时候这个 Makefile 还只包含了 1591 行代码,当我开始写本文时,内核已经是 4.2.0 的第三个候选版本
本文向大家介绍linux编译内核的方法,包括了linux编译内核的方法的使用技巧和注意事项,需要的朋友参考一下 1、下载需要的内核版本 2、上传到操作系统 3、解压到/usr/src目录下 比如:3.19内核 tar -xvf linux-3.19.tar.xz -C /usr/src 4、创建连接 cd /usr/src ln -sv /usr/src/linux-3.19 Linux 5、进行
本文向大家介绍Vue 中使用富文本编译器wangEditor3的方法,包括了Vue 中使用富文本编译器wangEditor3的方法的使用技巧和注意事项,需要的朋友参考一下 富文本编译器在vue中的使用 在开发的过程中由于某些特殊需求,被我们使用,今天我就简单讲一讲如何在vue中使用wangEditor3 首先讲一下简单的使用。 1、使用npm安装 2、vue页面代码如下 3、呈现效果如下 4、常见
本文向大家介绍go语言静态库的编译和使用方法,包括了go语言静态库的编译和使用方法的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍go语言静态库的编译和使用方法,以windows平台为例,linux平台步骤一样,具体环境如下: 在%GOPATH%\src目录,有demo包和使用demo包的应用程序main.go,main.go代码如下: demo包中的demo.go代码如下: 由于demo.
在Linux上如何使用gcc编译c程序 如何安装gcc 编辑c代码 编辑代码 运行代码
本文向大家介绍Centos7.2 编译安装PHP7.0.2的步骤,包括了Centos7.2 编译安装PHP7.0.2的步骤的使用技巧和注意事项,需要的朋友参考一下 环境 系统:Centos7.2 服务:Nginx 1:下载PHP7.0.2的安装包解压,编译,安装: 1.1编译前检查 请检查是否安装了gcc ,没有的话执行yum install gcc 检查是否安装了libxml2 ,没有的话执行