Qt (QFtp) вопрос - PullRequest
       28

Qt (QFtp) вопрос

0 голосов
/ 18 января 2010

Здравствуйте, я изучаю 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.

1 Ответ

2 голосов
/ 18 января 2010

Предполагая, что все команды до get успешны, вполне вероятно, что вы закрываете соединение до завершения get. Вы должны сохранить идентификатор, возвращаемый get, и вызывать close, когда с этим идентификатором вызывается сигнал commandFinished.

Примечание: за исключением setTransferMode все используемые вами методы являются асинхронными. Они будут выполняться в том порядке, в котором они были вызваны, но поскольку вы не выполняете какую-либо проверку ошибок, возможно, что одна из них завершится неудачно, а остальные все равно будут предприняты попытки, что может привести к некоторой путанице.

Правильный способ сделать это - сначала connectToHost, если это успешно (вы можете отследить это с помощью сигнала commandFinished), позвонить login и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...