首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt、QCoreApplication和QFtp

Qt、QCoreApplication和QFtp
EN

Stack Overflow用户
提问于 2015-03-24 21:19:30
回答 1查看 408关注 0票数 1

我想第一次使用QFtp,我用谷歌搜索了很多,想知道应该如何使用它。这是一个典型的例子:

代码语言:javascript
复制
#include <QCoreApplication>
#include <QFtp>
#include <QFile>

int main(int argc, char ** argv)
{
  QCoreApplication app(argc, argv);

  QFile *file = new QFile( "C:\\Devel\\THP\\tmp\\test.txt" );
  file->open(QIODevice::ReadWrite);

  QFtp *ftp = new QFtp();

  ftp->setTransferMode(QFtp::Active);
  ftp->connectToHost("ftp.trolltech.com"); 
  ftp->login();                           
  ftp->cd("qt");                     
  ftp->get("INSTALL",file);               
  ftp->close();

  QObject::connect(ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

  int ret = app.exec();

  delete ftp;
  delete file;

  return ret;
}

问题是:

据我所知,QCoreApplication应用程序需要处理“完成”信号,该信号在ftp-get完成时发出。现在,在连接之前调用ftp->get,甚至在应用处理程序运行之前(之后调用app.exec())。

如果文件传输在"connect“语句之前就已经完成了,会发生什么?事实上,这不会发生,但我可以在ftp->close()和连接之间设置一个人为的延迟,比如说1分钟(...)。在此期间,ftp get肯定会完成。会发生什么呢?

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 21:32:52

请注意,QFtp实际上只适用于遗留的Qt应用程序,现在建议使用QNetworkAccessManagerQNetworkReply,如Qt documentation中所述。

也就是说,在连接到FTP站点并检索文件之后定位连接调用,如果首先下载文件,则永远不会到达“quit”信号。如果您在创建QFtp对象后直接连接,那么这将不是问题:-

代码语言:javascript
复制
QFtp *ftp = new QFtp();
QObject::connect(ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

这保证了当QFtp对象发出'done‘信号时,将调用'quit’槽。

代码语言:javascript
复制
QFtp *ftp = new QFtp();
QObject::connect(ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

ftp->setTransferMode(QFtp::Active);
ftp->connectToHost("ftp.trolltech.com"); 
ftp->login();                           
ftp->cd("qt");                     
ftp->get("INSTALL",file);               
ftp->close();

int ret = app.exec();

但实际上,我希望您的示例中的连接在机器有时间协商到另一个服务器的连接、登录并开始下载文件之前完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29233745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档