QProgressBar проблема с загрузкой - PullRequest
0 голосов
/ 02 апреля 2010

Сначала я показываю свой код, затем объясняю свою проблему:

...
// somewhere in the constructor
    progressBar = new QProgressBar(this);
    progressBar->setMinimum(0);
    progressBar->setMaximum(100);
...
    connect(&http, SIGNAL(dataSendProgress(int, int)), this, SLOT(updateProgressBar(int, int)));
...
void MainWindow::updateProgressBar(int bytesSent, int total)
{
        progressBar->setMaximum(total);
        progressBar->setValue(bytesSent);
}

Так вот, как я пытаюсь обновить свой progressBar при загрузке файла. Проблема в том, что он не справится с работой. Когда он начинает загружаться, я устанавливаю значение индикатора выполнения на 0, затем (благодаря этому слоту) он фактически не будет отображать прогресс, но сразу переместится на 100% (даже до того, как завершит загрузку).

Я уже проверил пример HTTP-клиента и скопировал часть индикатора выполнения, она предназначена для загрузки и более или менее аналогична загрузке, но использует сигнал dataReadProgress (необходим для загрузки) И он works отлично .
Кто-нибудь знает, как решить эту проблему для загрузки?

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Похоже, вы используете QHttp, а не QNetworkAccessManager. QHttp устарела и содержит ошибки, связанные с сигналами прогресса.

Пожалуйста, посмотрите на использование http://qt.nokia.com/doc/4.7-snapshot/qnetworkreply.html#downloadProgress и http://qt.nokia.com/doc/4.7-snapshot/qnetworkreply.html#uploadProgress

0 голосов
/ 03 апреля 2010

Из Qt Doc:

Предупреждение: выполнено и общее не обязательно размер в байтах, т.к. для больших файлов эти значения могут необходимо «масштабировать», чтобы избежать переполнения.

См. Также dataReadProgress (), post (), request () и QProgressBar.

Таким образом, в случае done (например) в байтах (скажем, 10 B) и total в кБайтах (скажем, 7 кБ), тогда total < done и, следовательно, progressBar становится равным 100%

...