QIODevice has several shortcomings:
- it requires inheritance
- it buffers/copies data
- it is designed for synchronous usage
- error handling is limited
Separating the producing and consuming of data independent from how the data is processed, would give us a lot more flexibility, allowing piping, implementing a device without inheritance, and not be tied to a synchronous API.