Лучшим решением, которое я нашел, является использование сигнала readyRead ( QNetworkReply происходит из QIODevice ), а затем реализует проверку безопасности самостоятельно в slot
:
void onReadyRead()
{
for (;;)
{
QByteArray currentDataRead = httpReply->read(100); // Just read some bytes
if ( currentDataRead.isEmpty() )
return;
myResponseBody.append(currentDataRead);
if (myResponseBody.size() > myMaxResponseSize) // check my limit
{
qDebug() << "Error: response size bigger than expected - aborting";
httpReply->abort();
}
}
}
Примечание: требуется цикл inifite for(;;)
и проверка if ( currentDataRead.isEmpty() ) return;
, чтобы не оставить некоторые байты в конце, потому что мы находимся внутри onReadyRead
], который является slot
, подключенным к readyRead
и из документации:
readyRead () не испускается рекурсивно; если вы запустите цикл событий или вызовите waitForReadyRead () внутри слота, подключенного к сигналу readyRead (), сигнал не будет повторно использован (хотя waitForReadyRead () все равно может вернуть true).
blockquote>--------------------
PS: Я по-прежнему открыт для лучших решений, возможно, родных в Qt
Вы пробовали readfile (...); должен прочитать и вывести файл. В вашем примере вы не выводите данные изображения