Je souhaite utiliser QFtp pour la première fois et faire beaucoup de recherches sur Google pour savoir comment l'utiliser. Ceci, entre autres est un exemple typique:Qt, QCoreApplication et 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;
}
La question:
Pour autant que je compris, l'application QCoreApplication est nécessaire pour gérer le signal « fait », exprimés lors de la finalisation de ftp-get. Maintenant, le ftp->get
est appelé avant la connexion et même avant que le gestionnaire de l'application soit en cours d'exécution (app.exec() est appelé par la suite). Que se passe-t-il si le transfert de fichier est déjà terminé avant l'instruction "connect"? En fait, cela n'arrivera pas, mais je pourrais mettre un retard artificiel de, disons 1 minute entre ftp->close()
et le connecter (...). Pendant ce temps, le ftp get sera sûrement fini. Ce qui se passerait?
Si le ftp est fait avant le début de la boucle d'événements, votre application ne se fermera pas et vous devrez tuer son processus. – vahancho
'QFtp' a besoin d'une boucle d'événement en cours pour traiter les commandes. Vous pouvez donc attendre 10 000 ans avant l'instruction 'connect' et cela ne ferait aucune différence puisque les commandes que vous dites à' QFtp' ne seront pas exécutées avant d'appeler 'app.exec();' – thuga