[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 |
|
|
kwisp |
17.6.2009, 11:26
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
SABROG,
действительно странное поведение. так как тролли не гарантируют Цитата This signal is emitted when this object reads data from a HTTP server to indicate the current progress of the download. done is the amount of data that has already arrived and total is the total amount of data. It is possible that the total amount of data that should be transferred cannot be determined, in which case total is 0.(If you connect to a QProgressBar, the progress bar shows a busy indicator if the total is 0). то лучше наверное закрывать диалог по requestFinished() |
|
|
SABROG |
17.6.2009, 12:03
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Решил вывести в консоль прогресс, вот что получил:
Пардон за то, что ввёл в заблуждение, полученное значение не больше, чем должно быть, а меньше, просто по непонятным причинам приходит requestFinished. Опять проверил, если убрать dialog.exec(), то значения совпадают и все нормально, а если вернуть, то опять говорит, что считал меньше чем должно быть и диалог не исчезает. Вообще dialog.reset() в requestFinished спасает ситуацию, но глюк то есть. --- Заменил exec() на show(), вроде бы нормально. Похоже существует какая-то проблема между основным циклом событий и дополнительным в exec(). Событие проглатывается чтоль... Сообщение отредактировал SABROG - 17.6.2009, 12:33 |
|
|
kwisp |
17.6.2009, 13:00
Сообщение
#4
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
SABROG |
17.6.2009, 14:03
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Прежде чем постить баг троллям попробуйте у себя тестовый код, который я накатал. Обнаружил параллельно вторую проблему, слишком маленькие файлы не закрывают диалог. Такое ощущение, что самое первое событие куда-то пропадает причем не 100% каждый раз, а может 10 раз выкачать нормально, а потом нет. Потыкайте кнопочку несколько раз (10-20).
Прикрепленные файлы
|
|
|
Litkevich Yuriy |
17.6.2009, 14:16
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
QProgressDialog вообще чудной,
У меня инициализирован так:
Дак вот на одной из 4 машин, а именно ноутбуке с ВинХП3, вместо "Отмена" написано "Cancel" откуда она взялась эта надпись? |
|
|
SABROG |
17.6.2009, 14:24
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Откуда берется понятно:
А вот почему, это вопрос:
Ты ведь не используешь этот конструктор?
Похоже, что проблема в твоей винде, она видимо английская:
Вообще не правильное поведение, щас напишу багрепорт. Сообщение отредактировал SABROG - 17.6.2009, 14:30 |
|
|
Litkevich Yuriy |
17.6.2009, 14:43
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Может оно и из-за английской (пиратская)
Но у меня и текст "Чтение данных" заменён на умалчиваемый, что типа: "Process in progress, pease wite" |
|
|
SABROG |
17.6.2009, 15:13
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
Litkevich Yuriy |
17.6.2009, 15:23
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я не нашел? ну тем интереснее, я когда увидел, думал, что скопировал из примера а свой написать забыл, проверил исходники - всё по-русски.Тогда перетащил каталог на другую машину и запустил - вижу русский текст. Загадка. У меня даже запись в рабочем SVN'е такая: Цитата * Добавил окно процесса, но фигня там какая-то.
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 2:23 |