Rotierendes QGraphicsView
Verfasst: Samstag 3. August 2013, 12:07
Moin,
ich versuche schon seit einiger Zeit ein rundes, um den Mittelpunkt rotierendes QGraphicsView zu erstellen. (Es soll dann als Overlay dienen) Das Problem ist: es "eiert" um den Mittelpunkt und ich bekomme es einfach nicht zentreiert und kann das Problem nicht erkennen.
Frage: Wie bekomme ich den Rotationsmittelpunkt in der Abbildung zentriert?
Hat hier jemand eine Idee?
Mit freundlichen Grüßen,
Bob
ich versuche schon seit einiger Zeit ein rundes, um den Mittelpunkt rotierendes QGraphicsView zu erstellen. (Es soll dann als Overlay dienen) Das Problem ist: es "eiert" um den Mittelpunkt und ich bekomme es einfach nicht zentreiert und kann das Problem nicht erkennen.
Frage: Wie bekomme ich den Rotationsmittelpunkt in der Abbildung zentriert?
Hat hier jemand eine Idee?
Code: Alles auswählen
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class Overlay(QWidget):
def __init__(self,parent=None):
QWidget.__init__(self,parent)
self.height = parent.size().height()/2
self.width = parent.size().width()/2
self.setGeometry(80,20,self.height, self.height)
scene = QGraphicsScene(0,0,self.height,self.height)
scene.addItem(self.create_letter())
scene.addEllipse(0, 0, self.height ,self.height, QPen(Qt.NoPen), QBrush(QColor(0,129,94,40)))
self.view = QGraphicsView(self)
self.view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
self.view.setStyleSheet("background: rgba(100,100,100,50); border: transparent")
self.view.setScene(scene)
def create_letter(self):
n = self.height
group = QGraphicsItemGroup()
txt = QGraphicsTextItem("N")
txt.setFont(QFont("Arial", 20))
txt.translate(n/2-14, 30)
group.addToGroup(txt)
txt = QGraphicsTextItem("E")
txt.setFont(QFont("Arial", 20))
txt.translate(n-30, n/2 - 13)
txt.setRotation(90)
group.addToGroup(txt)
txt = QGraphicsTextItem("S")
txt.setFont(QFont("Arial", 20))
txt.translate(n/2+13, n - 30)
txt.setRotation(180)
group.addToGroup(txt)
txt = QGraphicsTextItem("W")
txt.setFont(QFont("Arial", 20))
txt.translate(30, n/2 + 16)
txt.setRotation(270)
group.addToGroup(txt)
return group
def rot_compass(self, angle=0):
self.view.rotate(80)
class Main(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(300,300,600,400)
self.overlay = Overlay(self)
self.t()
def paintEvent(self, event):
path = QPainterPath()
path.addRoundRect(0,0,500,380,25)
painter = QPainter(self)
pen = QPen(QColor(90,90,90))
pen.setWidth(2)
painter.setBrush(QColor(248,241,225))
painter.setPen(pen)
painter.drawPath(path)
def t(self):
print("Timer start")
self.timer = QTimer(self)
self.connect(self.timer, SIGNAL("timeout()"), self.overlay.rot_compass)
self.timer.start(1000)
app = QApplication(sys.argv)
m = Main()
m.show()
sys.exit(app.exec_())
Bob