2010-12-20 6 views
2

Es tut mir leid, wenn meine Frage etwas vage ist. Es ist ein paar Jahre her, dass ich irgendetwas mit Qt gemacht habe, und damals habe ich nie irgendwelche Bilder gemacht. Was ich unten frage, sind nur einige allgemeine Vorschläge, welche Klassen in Betracht gezogen werden sollten. Ich versuche, den falschen Baum von Anfang an nicht zu bellen.Zeichnen auf einem scrollbaren, zoombaren Bild in Qt

Die Situation: Ich schreibe ein Qt-basiertes Programm, in dem ich ein etwas großes (sagen wir mal 5000x5000) Rasterbild anzeigen muss. Der Benutzer sollte in der Lage sein, (schnell) hinein- und hinauszuzoomen und das Bild ähnlich wie Google Maps zu verschieben. Bis jetzt ist dies nicht sehr verschieden von the Qt ImageViewer example, außer vielleicht für die Anforderung, dass das Zoomen schnell geschieht. Allerdings muss ich in der Größenordnung von 50k einfache geometrische Formen (sagen wir mal Kreise) über das Bild zeichnen und in der Lage sein, einige davon auf einfache Weise hinzuzufügen und zu entfernen. Die Kreise sollten unabhängig von der Zoomstufe die gleiche Größe haben und sollten daher immer neu gezeichnet werden, wenn der Benutzer zoomt, oder mit Vektorgrafiken gezeichnet werden. Stellen Sie sich die Kreise als Kartenanmerkungen vor. Diese sollten bei jeder Zoomstufe gleich aussehen und sich auch in puncto Panning gut verhalten.

Ich denke, meine Frage ist zweifach:

  1. Kann Qt Vektorgrafiken auf der Spitze eines Rasterbild zeichnen?
  2. Im Allgemeinen, welche Klassen sollte ich für die oben genannten berücksichtigen?

Vielen Dank im Voraus. Ich mag es nicht, vage Fragen selbst zu beantworten, aber vielleicht jemand mit Erfahrung mit Qt Grafik-Funktionen hat eine Antwort.

Antwort

5

Ich schlage vor, Sie verwenden QGraphicsView und Freunde dafür. Es hilft, alle Blick/Welt-Transformation zu handhaben und die Vektorelemente können mit verschiedenen QGraphicsItems erreicht werden.

Sie können die Größe der Elemente bei jeder Änderung der Zoomstufe ändern, um konstante scheinbare Größen beizubehalten.

+0

Das ist genau das, was ich wollte. Vielen Dank. – gspr