Problem in paintEvent
Verfasst: 7. Februar 2007 23:56
Hi Leute,
ich programmiere gerade eine GUI, die eine zoombare Karte beinhaltet. Die Karte ist abgeleitet von Widget und befindet sich in einer ScrollView.
Die Karte selbst zeichne ich in einem paintEvent. Das heisst, der Painter skaliert sich abhängig vom Zoom-Faktoren und zeichnet dann ein Pixmap (beinhaltet die Karte).
Problem ist, dass der ganze Spaß extrem langsam ist. Das Bild zieht nach, wenn man scrolled und befindet man sich im Zoom wird das ganze nur noch schlimmer.
Das alles ist ja eigentlich auch kein Wunder, da das Bild bei jedem Ruf des paintEvents komplett skaliert und neu gemalt wird.
Jetzt frage ich mich, ob ich die Karte wirklich jedes mal neuzeichnen muss? Ich habe schon probiert, die Karte einfach zu skalieren in ein anderes Pixmap zu zeichnen und dann mit setPaletteBackgroundPixmap(...) einfach als Hintergrund zu setzen. Das ist aber auch keine Lösung. Zwar ist das scrollen schön flott, dafür dauert das Zoomen weitaus länger (mein Rechner rödelt wild rum).
Das Widget scheint ja jedesmal von grund auf gemalt zu werden. Ich frage mich, ob es eine Möglichkeit gibt, dem paintEvent mitzuteilen, dass es nicht das ganze Widget neuzeichnen soll. Also quasi das, was der Painter zuletzt gezeichnet hat, erneut zu laden. Sowas gibts doch bestimmt, aber ich finds einfach nicht...
Gruß
Tomte
ich programmiere gerade eine GUI, die eine zoombare Karte beinhaltet. Die Karte ist abgeleitet von Widget und befindet sich in einer ScrollView.
Die Karte selbst zeichne ich in einem paintEvent. Das heisst, der Painter skaliert sich abhängig vom Zoom-Faktoren und zeichnet dann ein Pixmap (beinhaltet die Karte).
Problem ist, dass der ganze Spaß extrem langsam ist. Das Bild zieht nach, wenn man scrolled und befindet man sich im Zoom wird das ganze nur noch schlimmer.
Das alles ist ja eigentlich auch kein Wunder, da das Bild bei jedem Ruf des paintEvents komplett skaliert und neu gemalt wird.
Jetzt frage ich mich, ob ich die Karte wirklich jedes mal neuzeichnen muss? Ich habe schon probiert, die Karte einfach zu skalieren in ein anderes Pixmap zu zeichnen und dann mit setPaletteBackgroundPixmap(...) einfach als Hintergrund zu setzen. Das ist aber auch keine Lösung. Zwar ist das scrollen schön flott, dafür dauert das Zoomen weitaus länger (mein Rechner rödelt wild rum).
Das Widget scheint ja jedesmal von grund auf gemalt zu werden. Ich frage mich, ob es eine Möglichkeit gibt, dem paintEvent mitzuteilen, dass es nicht das ganze Widget neuzeichnen soll. Also quasi das, was der Painter zuletzt gezeichnet hat, erneut zu laden. Sowas gibts doch bestimmt, aber ich finds einfach nicht...
Gruß
Tomte