First of all I would optimize the existing solution and turn all paint caches off, because you have your own image cache:

a) Spectrogram item
Qt Code:
  1. spectrogram->setCachePolicy(QwtPlotRasterItem::NoCache);
To copy to clipboard, switch view to plain text mode 

b) Plot canvas

Qt Code:
  1. plot->canvas()->setPaintAttribute(QwtPlotCanvas::PaintCached, false);
  2. plot->canvas()->setPaintAttribute(QwtPlotCanvas::PaintPacked, false);
To copy to clipboard, switch view to plain text mode 
c) Qt ( only supported on X11 )

Qt Code:
  1. plot->canvas()->setAttribute(Qt::WA_PaintOnScreen, true);
To copy to clipboard, switch view to plain text mode 

Another optimization on multicore systems is to render parts of the image parallel in several threads.

Uwe