[Qt 4.5.0] QHttp и QProgressDialog, странное поведение |
Здравствуйте, гость ( Вход | Регистрация )
[Qt 4.5.0] QHttp и QProgressDialog, странное поведение |
SABROG |
17.6.2009, 15:42
Сообщение
#11
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Вот гифку накатал, которая показывает в чем проблема:
~500kb |
|
|
Litkevich Yuriy |
17.6.2009, 16:40
Сообщение
#12
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
поменял местами:
progressDlg.setValue(done); progressDlg.setMaximum(total); И запуск по progressDlg.setValue(1); Т.е. сначала максимум, потом завершено. И стало всё путём т.к. ты не инициализируешь диалог максимальным значением, а сразу устанавливаешь значение то потенциально оно может быть меньше умалчиваемого максимума, а функция httpDataReadProgress больше никогда не вызовится. П.С.
у this'а нет такого сигнала |
|
|
SABROG |
17.6.2009, 16:47
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
И запуск по progressDlg.setValue(1); А тут я не понял. progressDlg.setValue(done); progressDlg.setMaximum(total); Это я поменял, но ничего не изменилось. у this'а нет такого сигнала Нету, я просто не тестировал этот участок он "мертв по прибытии" использовал в конструкторе progressDlg.setRange(1, 100); но это не изменило ситуации. |
|
|
Litkevich Yuriy |
17.6.2009, 16:51
Сообщение
#14
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Сейчас код так выглядит:
Вообще поковырявшись пару месяцев назад с QProgressDialog, делаю так: 1) Объявляю указатель на него 2) В нужной функции всегда конструирую с диаппазоном 0...100: pd = new QProgressDialog(tr("Чтение данных"), tr("Отмена"), 0, 100, this); И соеденяю сигнал установки значения: connect(myobject, SIGNAL(value(int)), pd, SLOT(setValue(int))); 3) Запускаю диалог так: pd->setValue(1); 4) Управляю процессом всегда посылая сигнал с зарание посчитыным процентом. 5) В завершающей функции делаю так: pd->deleteLater(); |
|
|
SABROG |
17.6.2009, 16:56
Сообщение
#15
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Так ты же считерил
Без exec() и у меня всё работает, а ты с ним попробуй. Бывают же ситуации, когда надо дождаться завершения диалога, прежде чем продолжить выполнение слота. |
|
|
Litkevich Yuriy |
17.6.2009, 17:07
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Всё пучкома с exec'ом уменя и простые вещи странно себя вели. Поэтому не пользуюсь. вообще с exec'ом по умолчанию: Цитата Dialogs can be application modal (the default) or window modal. В моём понимании всё приложение должно встать колом. соответсвенно и слоты другие тоже
|
|
|
SABROG |
17.6.2009, 17:49
Сообщение
#17
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
SABROG |
18.6.2009, 12:05
Сообщение
#18
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Опаньки народ, получил такое письмо от троллей:
Цитата Our focus is now on QNetworkAccessManager and QHttp will be deprecated for 4.6. Could you port your code to use QNetworkAccessManager? It should work more reliably. If it still does not work properly, please report back Regards, -- Markus Goetz, Software Engineer Nokia, Qt Software Класс QHttp зарубают, взамен его будет QNetworkAccessManager. --- Переделал код на этот и все работает отлично:
Сообщение отредактировал SABROG - 18.6.2009, 12:52 |
|
|
Litkevich Yuriy |
18.6.2009, 15:33
Сообщение
#19
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
где-то я уже слышал про рекомендацию использования QNetworkAccessManager'а, но значения не придал.
|
|
|
SABROG |
18.6.2009, 17:35
Сообщение
#20
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
где-то я уже слышал про рекомендацию использования QNetworkAccessManager'а, но значения не придал. Сейчас я столкнулся с некоторой проблемкой. Если скачивается целый ворох файлов, то как в этом методе определить для какого файла пришел статус? void QNetworkReply::downloadProgress ( qint64 bytesReceived, qint64 bytesTotal ) [signal] Раньше я использовал QHttp::currentId(), а теперь похоже придется использовать sender(). Но этот метод мне не нравится по комментариям к нему в ассистенте. |
|
|
Текстовая версия | Сейчас: 15.1.2025, 2:27 |