Я хочу использовать QFtp в первый раз и много разобраться, чтобы узнать, как его использовать. Это, среди прочего, является типичным примером:Qt, QCoreApplication и 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 нужно обрабатывать «сделано» сигнал, emmited после завершения работы FTP-получить. Теперь, ftp->get
вызывается перед подключением и даже до того, как обработчик приложения вообще запущен (app.exec() вызывается потом).
Что происходит, если передача файлов завершена уже до утверждения «connect»? На самом деле этого не произойдет, но я могу установить искусственную задержку, скажем, 1 минута между ftp->close()
и подключением (...). За это время, ftp get, безусловно, будет закончен. Что случилось бы?
Если ftp выполняется до того, как цикл событий запущен, приложение не выйдет, и вам придется убить его процесс. – vahancho
Для обработки команд 'QFtp' нужен цикл выполнения событий. Таким образом, вы можете подождать 10 000 лет до утверждения 'connect', и не имеет значения, поскольку команды, которые вы укажете' QFtp' для выполнения, не будут выполнены до вызова 'app.exec();' – thuga