downloadProgress не выдается из QNetworkReply

Я пытаюсь создать модуль, который загружает двоичный файл в Qt, используя QNetworkAccessManager. Я использую тот же подход, подробно описанный в документации (см. ниже), но хотя я получаю сигналы readyRead, downloadProgress никогда не приходит.

Все происходит в одном потоке (проект большой, поэтому я не могу его все вставить).

Любые идеи?

QNetworkRequest request;
request.setUrl("http://XXX.s3.amazonaws.com/XXX.exe");
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

QNetworkAccessManager * m_manager = new QNetworkAccessManager( this );
m_reply = m_manager->get(request);
m_reply->setParent(this);

connect(m_reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)),
this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)));

person Lior    schedule 28.07.2009    source источник
comment
Вы на самом деле читаете материал на readyRead? Ничто в опубликованном коде не загружает...   -  person Eugene    schedule 28.07.2009
comment
да на самом деле я читал, просто не вставил сюда. образец используемого браузера из кода qt   -  person Lior    schedule 29.07.2009


Ответы (2)


ок, нашел
вау, какая простая ошибка.

ответ синтаксический:

connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)),
        this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal))); 

это ошибка

так должно быть:

connect(m_reply, SIGNAL(downloadProgress(qint64 , qint64 )),
        this, SLOT(replyDownloadProgress(qint64 , qint64 )); 

как только я изменил его, я получил сигнал.

QT НЕ ПРОВЕРЯЕТ СИНТАКСИЧЕСКИЕ ОШИБКИ В СВОЕМ ПРЕПРОЦЕССОРЕ (примечание для себя)

person Lior    schedule 28.07.2009
comment
Ага. Но эти ошибки легко пропустить (если вы вообще что-то выводите сами) - person Eugene; 29.07.2009
comment
Кицунэ: можно ли увидеть stderr в Visual Studio? будет ли это в окне вывода - person Lior; 29.07.2009
comment
Да, посмотрите в окне вывода. - person rpg; 30.07.2009

Я исправил свой Qt, чтобы использовать qFatal() вместо qWarning(), поэтому приложение утверждает вместо того, чтобы печатать сообщения об ошибках (это невозможно увидеть при связывании с выпуском сборки Qt). YMMV.

person Marc Mutz - mmutz    schedule 31.07.2009