Skip to content
  • 0 Votes
    3 Posts
    1k Views
    SGaistS

    Hi,

    Good catch ! I just remembered that there was an issue in earlier versions where the deployment tool didn't properly copy all the needed plugins. It has been fixed in between.

  • 0 Votes
    1 Posts
    383 Views
    No one has replied
  • 0 Votes
    14 Posts
    4k Views
    SGaistS

    I may have misunderstood the case that doesn’t work.

    Can you maybe do a small picture with the setup ?

  • 0 Votes
    3 Posts
    2k Views
    E

    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:

    QTcpSocket socket; qint64 readBufferSize; // Current max read buffer size. bool flag = false; // flag for changing max read buffer size. bool isReadBufferLimitReached = false; void App::CheckReadBufferLimitReached() { if (readBufferSize <= socket.bytesAvailable()) isReadBufferLimitReached = true; else if (isReadBufferLimitReached) { if (flag) { readBufferSize++; flag = !flag; } else { readBufferSize--; flag = !flag; } socket.setReadBufferSize(readBufferSize); 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.

  • 0 Votes
    1 Posts
    846 Views
    No one has replied
  • 0 Votes
    9 Posts
    3k Views
    M

    @SGaist
    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