Here is a piece of code that usually reproduces the problem. (There appears to be some kind of race condition ... sometimes this works without crashing. At least on my machine, however, it usually fails.)
The first call to QPrinter::paperSize() works, but the second call fails. You must accept the print dialog (eg. by clicking "preview" on the dialog) to get the failure.
My Objective-C is pretty weak, but it looks like QMacPrintEnginePrivate.format is set to point to an internal handle of QMacPrintEnginePrivate.printInfo in line 463. This initialization occurs in the constructor and whenever a paint operation starts on the print engine. But when the paint operation stop, the printInfo is released (line 494), leaving the format pointer pointing to never-never land. When QMacPrintEnginePrivate::paperSize() attempts to use format, you get the crash.
You can workaround it by putting a QPainter that operates on the QPrinter in the same scope as your call: