10000x10000... passt das überhaupt auf deinen Monitor?
Ich würde dahingehend optimieren, immer nur Ausschnitte aus dem Bild zu zeichnen. Du bekommst ja im paintEvent das rect(), welches neu gezeichnet werden soll. Hier kannst du doch wunderbar einen Ausschnitt aus dem rieseigen pixmap (wie groß ist das eigentlich?) nehmen und den an passender Position zeichnen.
Du kannst auch einen Timer verwenden: So lange wheelEvents sammeln (also einfach zoomFaktor hochzählen), bis der Timer auch abgelaufen ist, und erst DANN zeichnen. Kommt ein wheelEvent bevor der Timer abgelaufen ist, Timer neu starten.
Bitte verwende auch immer gleich die passenden eventHandler. Auch wenn sich am Speed am Ende nichts verändert:
* eventFilter() ist die Einsprungstelle für andere Objekte, um an die events zu kommen (schickt ja nicht alles ein SIGNAL raus)
* Eine große Funktion, in der du ALLES machst, ist unübersichtlich, fehleranfällig und kostet dank der vielen if(type()...) und casts irgendwann ein kleines Stück Performance
* Aus OOP-Sicht ist die Trennung von Funktionalität in einzelne Aufgaben zu bevorzugen: paintEvent() zeichnet, wheelEvent() wheelert, mousePressEvent() presst
Ich schreib das nur nochmal, da deine letzten Posts so wirkten, als würdest du hauptsächlich den eventFilter verwenden, und die spezialisierten Funktionen als Alternativen betrachten.