您好我正在学习qt并尝试使用QFtp上传文件我写了下面的代码
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();
}
它有点停止它在dataTransferProgress中报告它是0 / XXX但是从不再调用插槽(使用相同的代码但使用get函数我可以下载文件并且它可以正常工作)我在超时后得到的错误是QFtp :: UnknownError。
答案 0 :(得分:2)
假设get
之前的所有命令都成功,很可能是在get
完成之前关闭了连接。您应该保存get
返回的标识符,并在使用该标识符调用close
信号时调用commandFinished
。
注意:除setTransferMode
外,您使用的所有方法都是异步的。它们将按照调用它们的顺序执行,但由于您没有执行任何错误检查,因此可能会失败,其余的仍然会被尝试,这可能会导致一些混乱。
执行此操作的正确方法是首先connectToHost
,如果成功(您可以使用commandFinished
信号跟踪此信息),请致电login
等。