Qt,QCoreApplication和QFtp

时间:2015-03-24 13:19:30

标签: qt signals slot qftp

我想第一次使用QFtp并搜索了很多内容以了解它应该如何使用。这是一个典型的例子:

#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应用程序需要处理&#34;完成&#34;信号,在完成ftp-get时终止。现在,在连接之前调用ftp->get,甚至在应用程序处理程序运行之前(之后调用app.exec())。

如果文件传输已经在&#34; connect&#34;之前完成,会发生什么?声明?事实上,这不会发生,但我可以在ftp->close()和连接(...)之间设置1分钟的人为延迟。在此期间,ftp get肯定会完成。会发生什么?

1 个答案:

答案 0 :(得分:0)

请注意,QFtp仅适用于旧版Qt应用程序,现在建议使用QNetworkAccessManagerQNetworkReply,如Qt documentation中所述。

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

QFtp *ftp = new QFtp();
QObject::connect(ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

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

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();

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