That just shifts from one bottleneck (RAM) to another bottleneck (HDD) and when client sends gigabytes of data it's a bad idea. And in case server crashes, someone will need to manage those large files and re-sending that data will occupy network again which is wasting resources.
The best solution is for client to see if server is busy and don't send data and I found workaround how to do that.
In Qt5.10 sources i can clearly see that QTcpSpcket internal read notifications is disabled (qabstractsocket.cpp; bool QAbstractSocketPrivate::canReadNotification(); line 697) when read buffer is full and to enable read notifications you need to read all buffer to make it empty OR use QAbstractSocket::setReadBufferSize(newSize) which internally enables read notifications WHEN newSize is not 0 (unlimited) and not equal to oldSize (qabstractsocket.cpp; void QAbstractSocket::setReadBufferSize(qint64 size); line 2824). Here's a short function for that:
qint64 readBufferSize; // Current max read buffer size.
bool flag = false; // flag for changing max read buffer size.
bool isReadBufferLimitReached = false;
if (readBufferSize <= socket.bytesAvailable())
isReadBufferLimitReached = true;
else if (isReadBufferLimitReached)
flag = !flag;
flag = !flag;
isReadBufferLimitReached = false;
In the function which reads data from QTcpSocket at the set intervals, BEFORE reading data, I call this function, which checks if read buffer is full and sets isReadBufferLimitReached if true. Then I read needed amount of data from QTcpSocket and AT THE END I call that function again, which, if buffer were full before, calls QAbstractSocket::setReadBufferSize(newSize) to set new buffer size and enable internal read notifications. Changing read buffer size by +/-1 should be safe, because you read at least 1 byte from socket.
And on client side you can use QAbstractSocket::bytesToWrite(), QAbstractSocket::flush() or QAbstractSocket::waitForBytesWritten() to know if server is busy.
I tried very hard. But, still am not satisfied with the implementation. And now am feeling helpless.
If I set set, fixedsize for QLabel, then scroll bars won't appear if I use zoomout/zoomin.
My question is why QLabel won't shrink back after changing size through Qsplitter. I tried all the combinations of sizepolicy and nothing has worked so far