首页 > 编程技术 > C语言

QT5编译使用QFtp的方法步骤

发布时间:2021-2-4 10:00

背景

使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,但它没有提供例如list、cd、remove、mkdir、rmdir、rename 等功能。这种情况下,我们可以使用QFtp,需要下载源码、编译并处理一些坑。

下载

从 GitHub 下载 QFtp:

https://github.com/qt/qtftp

编译

用qtcreator打开qftp/qftp.pro,编译生成库文件。

放入QT5安装目录中

我以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内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

标签:[!--infotagslink--]

您可能感兴趣的文章: