QNetworkReply, с чем связано поведение?



  • Написал слот:
    @ba = new QByteArray(length,'\0');
    lastPos = 0;

    QNetworkReply *reply = manager->get(request);
    connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(slotDownloadProgress(qint64,qint64)));

    void Player::slotDownloadProgress(qint64 cur, qint64 tot)
    {

    if(cur > 256000)
    {
                QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
                ba->replace(lastPos,reply->bytesAvailable(),reply->readAll());
                lastPos = cur+1;
                if (media->state() == Phonon::StoppedState)
                {
                    media->setCurrentSource(Phonon::MediaSource(buffer));
                    emit timeToPlay();
                }
    }
    

    }@

    В данном случае, QByteArray::replace срабатывает как Insert. На лицо все признаки, что reply->bytesAvailable() возвращает -1. Проверяю qDebugом - нет, все нормально, получаю разные числа. Переписал в следующем виде:
    @qint64 available = reply->bytesAvailable();
    ba->replace(lastPos,available,reply->readAll());@
    Работает. Чем можно объяснить такое поведение?



  • возможно что функции-аргументы для
    @
    ba->replace(lastPos,reply->bytesAvailable(),reply->readAll());
    @
    вызываются начиная с последнего.
    Таким образом reply->bytesAvailable() вызывается после reply->readAll() и равно 0

    вы поменяли порядок вызова и всё заработало.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.