crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> [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:51
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Сейчас код так выглядит:
public slots:
    void buttonClicked(bool checked = false)
    {
        http.setHost(QLatin1String("www.qtsoftware.com"));
//if download logo.png progressbar don't disappear
http.get(QLatin1String("/logo.png"));

//        http.get(QLatin1String("/files/pdf/qt-4.4-whitepaper"));
        //progressDlg.exec();
        progressDlg.setValue(1);
    }
    void httpDataReadProgress(int done, int total)
    {
        qDebug() << done << total;
        progressDlg.setMaximum(total);
        progressDlg.setValue(done);

    }

Вообще поковырявшись пару месяцев назад с 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   [Qt 4.5.0] QHttp и QProgressDialog   17.6.2009, 11:17
- - kwisp   SABROG, действительно странное поведение. так как...   17.6.2009, 11:26
- - SABROG   Решил вывести в консоль прогресс, вот что получил:...   17.6.2009, 12:03
- - kwisp   Цитата(SABROG @ 17.6.2009, 13:03) Похоже ...   17.6.2009, 13:00
- - SABROG   Прежде чем постить баг троллям попробуйте у себя т...   17.6.2009, 14:03
- - Litkevich Yuriy   QProgressDialog вообще чудной, У меня инициализир...   17.6.2009, 14:16
- - SABROG   Откуда берется понятно: void QProgressDialogPriva...   17.6.2009, 14:24
- - Litkevich Yuriy   Может оно и из-за английской (пиратская) Но у меня...   17.6.2009, 14:43
- - SABROG   Цитата(Litkevich Yuriy @ 17.6.2009, 15:43...   17.6.2009, 15:13
- - Litkevich Yuriy   Цитата(SABROG @ 17.6.2009, 19:13) я не на...   17.6.2009, 15:23
- - SABROG   Вот гифку накатал, которая показывает в чем пробле...   17.6.2009, 15:42
- - Litkevich Yuriy   поменял местами: progressDlg.setValue(done); progr...   17.6.2009, 16:40
- - SABROG   Цитата(Litkevich Yuriy @ 17.6.2009, 17:35...   17.6.2009, 16:47
- - Litkevich Yuriy   Сейчас код так выглядит: public slots: void b...   17.6.2009, 16:51
- - SABROG   Так ты же считерил //progressDlg.exec();...   17.6.2009, 16:56
- - Litkevich Yuriy   //progressDlg.exec(); progressDlg.setWin...   17.6.2009, 17:07
- - SABROG   Цитата(Litkevich Yuriy @ 17.6.2009, 18:07...   17.6.2009, 17:49
- - SABROG   Опаньки народ, получил такое письмо от троллей: Ц...   18.6.2009, 12:05
- - Litkevich Yuriy   где-то я уже слышал про рекомендацию использования...   18.6.2009, 15:33
|- - SABROG   Цитата(Litkevich Yuriy @ 18.6.2009, 16:33...   18.6.2009, 17:35
- - Litkevich Yuriy   с сеткой ещё не разу не работал, поэтому ничего пе...   18.6.2009, 17:55
- - SABROG   Вообще мне интересно влияет ли скорость скачивания...   18.6.2009, 17:59
- - Litkevich Yuriy   Цитата(SABROG @ 18.6.2009, 21:59) от коли...   18.6.2009, 18:04
|- - SABROG   Цитата(Litkevich Yuriy @ 18.6.2009, 19:04...   18.6.2009, 18:42
- - Авварон   бтв у меня программа выдавала double free при юзан...   18.6.2009, 22:12
- - SABROG   Цитата(SABROG @ 18.6.2009, 13:05) Передел...   19.6.2009, 18:00
|- - BRE   Цитата(SABROG @ 19.6.2009, 19:00) Я воспр...   19.6.2009, 21:10
- - Litkevich Yuriy   Цитата(BRE @ 20.6.2009, 1:10) Но если пом...   20.6.2009, 1:56
|- - BRE   Цитата(Litkevich Yuriy @ 20.6.2009, 2:56)...   20.6.2009, 5:53
|- - SABROG   В документации о сигналах и слотах написано: Цита...   20.6.2009, 8:30
- - Kagami   А меня, кстати, пару дней мучает вопрос: "Про...   20.6.2009, 10:32
|- - SABROG   Цитата(Kagami @ 20.6.2009, 11:32) А меня,...   20.6.2009, 10:35
- - Kagami   Попробуй переопределить Цитатаvoid QObject::discon...   20.6.2009, 10:43
- - SABROG   Цитата(Kagami @ 20.6.2009, 11:43) и посмо...   20.6.2009, 11:20
- - SABROG   Я в ступоре, сейчас тролли говорят, что это нормал...   22.6.2009, 18:23
- - SABROG   Баг признали, правда тикет еще не приняли. Пока со...   23.6.2009, 10:57
- - Litkevich Yuriy   а я что-то непонял насчёт этого варианта, разъясни   23.6.2009, 20:37
- - SABROG   Цитата(Litkevich Yuriy @ 23.6.2009, 21:37...   23.6.2009, 20:44
- - Litkevich Yuriy   я пока вижу только то, что добавился признак соеди...   23.6.2009, 20:50
|- - BRE   Цитата(Litkevich Yuriy @ 23.6.2009, 21:50...   24.6.2009, 8:09
- - Litkevich Yuriy   ну тогда вроде понятно, т.к. само событие finished...   24.6.2009, 8:24
|- - BRE   Цитата(Litkevich Yuriy @ 24.6.2009, 9:24)...   24.6.2009, 8:48
- - Litkevich Yuriy   тут у меня тоже мыслей нет.   24.6.2009, 9:02
- - SABROG   Говорят, что пофиксили: ЦитатаGood news, I think ...   25.6.2009, 16:55


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 12:17