Entlang eines Rasters zeichnen
Verfasst: Freitag 18. Dezember 2009, 17:09
Hallo!
Ich versuche in PyQt mit dem Graphics View Framework auf einem Raster zu zeichnen. Ich mein damit die Möglichkeit, Elemente nicht pixelgenau zu verschieben, sondern z. B. in 10px-Sprüngen.
Ich hatte bisher folgende Umsetzung:
Ich versuche also, in die Variable mPos den aktuellen (x|y)-Wert des Mauszeigers zu speichern, allerdings auf den Zehner abgerundet (wenn letzte Stelle < 5) oder aufgerundet (wenn letzte Stelle >= 5).
Dann wird das Element, in dem Fall eine QLine, auf diese Position geupdatet.
Das Problem bei dieser Methode ist, dass wenn die Position aufgerundet wird, die Linie nicht vollständig aktualisiert wird, also nicht 10px länger wird, sondern nur ca. 1px. Erst wenn ich eine neue Linie zeichne, wird die Linie aktualisiert richtig gezeichnet.
Es gibt also zwei Möglichkeiten mir zu helfen
Entweder ihr habt eine Idee, wie man diese Fehlfunktion(?) umgehen kann oder ihr habt zufällig eine andere Umsetzungsidee!
Für beides bin ich dankbar,
Qdeep
Ich versuche in PyQt mit dem Graphics View Framework auf einem Raster zu zeichnen. Ich mein damit die Möglichkeit, Elemente nicht pixelgenau zu verschieben, sondern z. B. in 10px-Sprüngen.
Ich hatte bisher folgende Umsetzung:
Code: Alles auswählen
def mouseMoveEvent(self, event):
#save current (rasterized) mouse position // x
if (int(str(event.x())[-1]) < 5):
self.mPos[0] = (event.x() / 10) *10
else:
self.mPos[0] = (event.x() / 10 + 1) *10
#y
if (int(str(event.y())[-1]) < 5):
self.mPos[1] = (event.y() / 10) *10
else:
self.mPos[1] = (event.y() / 10 + 1) *10
Dann wird das Element, in dem Fall eine QLine, auf diese Position geupdatet.
Das Problem bei dieser Methode ist, dass wenn die Position aufgerundet wird, die Linie nicht vollständig aktualisiert wird, also nicht 10px länger wird, sondern nur ca. 1px. Erst wenn ich eine neue Linie zeichne, wird die Linie aktualisiert richtig gezeichnet.
Es gibt also zwei Möglichkeiten mir zu helfen

Für beides bin ich dankbar,
Qdeep