Прогресс загрузки Qt не запускается после последовательных прерываний - PullRequest
0 голосов
/ 06 июля 2018

Для старого инструмента, использующего Qt 5.3.2, мы недавно столкнулись с проблемой. Используя менеджер QNetwork, мы загружаем файлы, но перед тем, как загрузить их, мы проверяем, могут ли они быть загружены из определенного региона. Для этого мы делаем прерывание при самой первой индикации прогресса.

С недавних пор мы не получаем сигнал downloadProgress после некоторых прерываний, и это происходит только при очень быстром сетевом соединении. По WiFi это не воспроизводит. В чем может быть проблема?

Некоторые фрагменты кода:

StartDownload:

networkManager->get(request);
networkReply->setReadBufferSize(4 * 1024 * 1024);
    connect(networkReply, SIGNAL(finished()),
        this, SLOT(onDownloadFinished()));

connect(networkReply, SIGNAL(downloadProgress(qint64, qint64)),
        this, SLOT(onDownloadProgress()));

connect(networkReply, SIGNAL(error(QNetworkReply::NetworkError)),
        this, SLOT(onDownloadError(QNetworkReply::NetworkError)));

connect(networkReply, SIGNAL(sslErrors(QList<QSslError>)),
        this, SLOT(onDownloadSslErrors(QList<QSslError>)));

connect(networkReply, SIGNAL(encrypted()),
        this, SLOT(onEncrypted()));

OnDownloadProgress:

void DownloadManager::onDownloadProgress()
{
    networkReply->abort();
                nrAborts++;
                startDownload(myurl);
}

OnDownloadFinished:

void DownloadManager::onDownloadFinished()
{
    networkReply->deleteLater();
}

1 Ответ

0 голосов
/ 09 июля 2018

Поскольку буфер чтения был заполнен до первого onDownloadProgress и никогда не читался, все зависло. Подписка на readyRead и чтение данных с помощью networkReply->readAll() приводит к очистке буфера и вызову сигналов downloadProgress.

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