I am a bit worried that this problem is considered to be a hard to fix this problem.
I have looked at the patch, and I can see how it can solve some rounding problems. I do not see why/how it breaks the preview,
but since you say so it probably does - but Unless I misunderstand or the given painter is not a direct painter to output, I would say
that it could be solved easily by:
newcode with patch;
The only minor problem is the missing printingToPrinter() - but I really think that it could easily be solved by either
a) qobject_cast on the painters device (this might be a bit slow - but still better than a bug-situations)
b) a stored/maintained variable in QPrivatePainter telling if we are printing to a printer