I'd suggest the external image approach:
Have a separate thread that draws a QImage and when it is ready, sends a signal to your widget.
The widget simply draws the image when it is resized, which is practically immediate.
The widget will have a slot that gets the new image and perhaps another slot that gets progress information of the generation of the new updated image, thus being able to draw some info for the user of the need for waiting.
Bookmarks