Написал такой слот:
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();
}
}
}
В данном примере
replace почему-то срабатывает как
insert. В итоге я получаю
QByteArray размером в два раза больше положенного, т.е. информация в процессе загрузки записывается, но нули, которыми я забил
QByteArray при инициализации, не заменяются, а так и остаются в конце байтового массива.
Пишу простенький пример:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QByteArray *ba = new QByteArray(100,'\0');
qDebug() << ba->size();
ba->replace(0,10,"1234567890");
qDebug() << ba->size();
return a.exec();
}
Естественно работает так, как надо.