Je cherche à effectuer une découpe image dans une QGraphicView
- je construit une QMainWindow contenant uen Qgraphicview et Qgraphicscene
- Je créé les méthodes pour les event souris
Mais j'ai un offset entre la sélection currentQrubberBand et cropPixmap affiché.
Je suppose que le problème vient du système de coordonnées, mais je n'arrive pas à le contourner.
class ImageViewer(QtWidgets.QMainWindow):
def __init__(self):
super(ImageViewer, self).__init__()
self.scene = QtWidgets.QGraphicsScene()
self.imageLabel = QtWidgets.QLabel()
self.cropLabel = QtWidgets.QLabel()
self.scrollArea = QtWidgets.QScrollArea()
self.scrollArea.setWidget(self.imageLabel)
self.setCentralWidget(widget)
self.scene.addWidget(splitter)
self.view = QtWidgets.QGraphicsView(self.scene)
self.view.setMouseTracking(True)
self.view.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag)
Puis je crée les méthodes de gestion de la souris
def mousePressEvent(self, eventQMouseEvent):
print("pressed")
self.originQPoint = self.view.mapToScene(eventQMouseEvent.pos())
self.currentQRubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle, self)
self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, QtCore.QSize()))
self.currentQRubberBand.show()
def mouseMoveEvent(self, eventQMouseEvent):
self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, eventQMouseEvent.pos()).normalized())
def mouseReleaseEvent (self, eventQMouseEvent):
#self.currentQRubberBand.hide()
currentQRect = self.currentQRubberBand.geometry()
print(currentQRect)
self.currentQRubberBand.deleteLater()
cropPixmap = self.pixmap.copy(currentQRect)
self.cropLabel.setPixmap(cropPixmap)
cropPixmap.save('output.png')