[Qt 4.5.0] QHttp и QProgressDialog, странное поведение |
Здравствуйте, гость ( Вход | Регистрация )
[Qt 4.5.0] QHttp и QProgressDialog, странное поведение |
SABROG |
17.6.2009, 11:17
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Хочу отображать QProgressDialog сразу же как пользователь нажал на кнопку типа "Скачать". Если не делать dialog.exec(), то обычно диалог появляется через 4 секунды сам (minimumDuration) или при первом step'e (изменении значения в прогрессе). Вроде бы все работает нормально за исключением того, что пользователь ждет появления диалога секунд 10, а сам диалог появляется на секунды 3. Связано это с тем, что при запросе xml файла с http сервера присходит его генерирование на основе данных в БД, а сам процесс скачивания быстрый. Так вот если все-таки делать dialog.exec(), чтобы пользователь хотябы видел, что нажатие на кнопку запустило процесс ожидания файла с сервера, то получается следующая ситуация.
По сигналу void QHttp::dataReadProgress ( int done, int total ) [signal] я меняю прогресс на диалоге. Иногда всё нормально работает и при достижении done==total диалог автоматически закрывается (типа 100% скачано). А иногда done приходит меньше, чем total, но затем следует requestFinished не дойдя до 100% и диалог остается висеть на 98-99% пока не нажмешь cancel. Ввиду разного поведения в разных ситуациях я исключаю возможность того, что сервер передает неправильный размер данных. Сообщение отредактировал SABROG - 17.6.2009, 12:34 |
|
|
Litkevich Yuriy |
17.6.2009, 16:40
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
поменял местами:
progressDlg.setValue(done); progressDlg.setMaximum(total); И запуск по progressDlg.setValue(1); Т.е. сначала максимум, потом завершено. И стало всё путём т.к. ты не инициализируешь диалог максимальным значением, а сразу устанавливаешь значение то потенциально оно может быть меньше умалчиваемого максимума, а функция httpDataReadProgress больше никогда не вызовится. П.С.
у this'а нет такого сигнала |
|
|
Текстовая версия | Сейчас: 23.1.2025, 1:55 |