[Qgis-developer] QDataStream reading from QProcess or stdin

Radim Blazek radim.blazek at gmail.com
Wed Jun 24 02:53:56 PDT 2015


Does anybody have experience with QDataStream reading from QProcess or
QFile.open(stdin,QIODevice::ReadOnly )? At the beginning I naively
thought that it just works cross platform. Looking closer, it does not
seem so obvious, see also [1][2]. What I am observing (currently on
Linux) is that if there are no data on the device, reading from
QDataStream is not blocked until data are available, it sets an error
and continues. In theory, the underlying QIODevice::readData should
block, Qt doc states:

"When reimplementing this function it is important that this function
reads all the required data before returning. This is required in
order for QDataStream to be able to operate on the class. QDataStream
assumes all the requested information was read and therefore does not
retry reading if there was a problem."

I looked briefly into QProcess code and it seems to be blocking,
unfortunately in practice it is not. Am I missing some options, mode
settings? Do I have to write my blocking QIODevice subclasses?

Radim


[1] http://stackoverflow.com/questions/19681564/read-from-qtcpsocket-using-qdatastream
[2] http://lists.qt-project.org/pipermail/interest/2012-May/002110.html


More information about the Qgis-developer mailing list