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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 18.6.2009, 12:05
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 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.
---
Переделал код на этот и все работает отлично:

#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtCore/QUrl>
#include <QtGui/QApplication>
#include <QtGui/QProgressDialog>
#include <QtGui/QPushButton>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>

class MyWidget : public QWidget
{
    Q_OBJECT;
public:
    MyWidget(QWidget *parent = 0) : QWidget(parent), button(this)
                                    , progressDlg(this)
                                    , netmanager(this)
    {
        button.setText(tr("Download"));
        progressDlg.setRange(1, 100);
        connect(&button, SIGNAL(clicked(bool)), this, SLOT(buttonClicked(bool)));

    }
public slots:
    void buttonClicked(bool checked = false)
    {

        QNetworkReply *reply = netmanager.get(
                QNetworkRequest(
                QUrl(
                QLatin1String(
                "http://www.qtsoftware.com/files/pdf/qt-4.4-whitepaper"
                ))));
        connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
                this, SLOT(dataReadProgress(qint64, qint64)));

        progressDlg.exec();
    }
    void dataReadProgress(qint64 done, qint64 total)
    {
        qDebug() << done << total;
        progressDlg.setMaximum(total);
        progressDlg.setValue(done);
    }
private:
    QPushButton button;
    QProgressDialog progressDlg;
    QNetworkAccessManager netmanager;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget widget;
    widget.show();
    return a.exec();
}

#include "main.moc"


Сообщение отредактировал SABROG - 18.6.2009, 12:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




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