我在QPixmap
对象中有一个QLabel
对象。我想绘制pixmap矩形,以便我可以获得图像中该矩形的坐标。我的问题是,当我在该像素图中绘制qrubberband矩形时,它没有得到图像的原始坐标。这是其他人,我不知道为什么。这是我创建qrubberband的代码。
def mousePressEvent (self, eventQMouseEvent):
if eventQMouseEvent.buttons() == Qt.LeftButton:
self.originQPoint = eventQMouseEvent.pos()
self.currentQRubberBand = QRubberBand(QRubberBand.Rectangle, self)
self.sequence.append(self.currentQRubberBand)
r = randint(0, 255)
g = randint(0, 255)
b = randint(0, 255)
palette = QPalette()
palette.setColor(self.currentQRubberBand.foregroundRole(), QColor(r, g, b))
self.currentQRubberBand.setPalette(palette)
self.currentQRubberBand.setGeometry(QRect(self.originQPoint, QSize()))
self.currentQRubberBand.show()
elif eventQMouseEvent.buttons() == Qt.RightButton:
found = False
for rect in self.sequence:
if(rect.geometry().contains(eventQMouseEvent.pos())):
self.menu = MenuRectangle(self._timeline, eventQMouseEvent, rect,
self.imageLabel, self.sequence)
found = True
if not found:
self.menuglobalimage = MenuGlobalImage(self._timeline, eventQMouseEvent, self._topic,
self.sequence, self.imageLabel, self.stamp)
def mouseMoveEvent (self, eventQMouseEvent):
self.currentQRubberBand.setGeometry(QRect(self.originQPoint, eventQMouseEvent.pos()).normalized())
先谢谢你。
答案 0 :(得分:0)
QMouseEvent.pos()返回事件相对于捕获事件的窗口小部件的位置。因此,根据您的标签的位置,这可能不是您想要的。
同样,QLabel.pos()返回标签相对于它位于
中的小部件的位置尝试将标签的位置与self.myimagelabel.pos()与鼠标事件的位置进行比较
我的猜测是你需要做一些像labelPos = myimagelabel.pos() - eventQMouseEvent.pos()来获取相对于图像的事件坐标
只是一个猜测,一个最小的工作示例将有助于
要尝试的另一件事是将QLabel子类化并实现qmousepressevent。与他们所做的类似http://installfest.railsbridge.org/installfest/linux