How about using QPainter::drawImage() instead? And QPainter::scale() for zooming?

If you have a 300x300 pixel image which occupies about 100kB of memory and you zoom it 4 times (making it 1200x1200) you'll use 1.5MB of memory... with 3000x3000 it'll be 9MB, etc. If you use QPainter::scale and QPainter::drawImage, you'll be at 100kB memory usage all the time.