Hello i am learning qt and trying to upload a file using QFtp i wrote the folowing code
this->connect(this->ftp, SIGNAL(done(bool)), this, SLOT(ftpDone(bool)));
this->connect(this->ftp, SIGNAL(dataTransferProgress(qint64, qint64)), this, SLOT(dataTransferProgress(qint64, qint64)));
this->connect(this->ftp, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int)));
…..
if(this->file.open(QIODevice::ReadWrite))
{
this->ftp->setTransferMode(QFtp::Active);
this->ftp->connectToHost(this->settings->getHost());
this->ftp->login(this->settings->getUser(), this->settings->getPassword());
this->ftp->cd(remoteFilePath);
this->ftp->get(this->fileName, &this->file);
this->ftp->close();
}
and it kind of stops it reports in dataTransferProgress that it is at 0/XXX but the slot is never invoked again (using the same code but with the get function i can download a file and it works without a problem) also the error that i get after the time out is QFtp::UnknownError.
Assuming all the commands until
getare successful, it’s likely that you are closing the connection beforegetfinishes. You should save the identifier returned bygetand callclosewhen thecommandFinishedsignal is called with that identifier.Note: Except
setTransferModeall of the methods you used are asynchronous. They will be executed in the order that they are called, but since you aren’t performing any error checking, it’s possible for one to fail and the rest will still be attempted which might result in some confusion.The proper way of doing this is to
connectToHostfirst, if that’s successful (you can track this with thecommandFinishedsignal) callloginetc.