мои координаты QRubberBand не соответствуют координатам моего изображения - PullRequest
0 голосов
/ 12 июня 2018

У меня есть QPixmap объект в QLabel объекте.Я хочу нарисовать прямоугольники этого растрового изображения, чтобы я мог получить координаты этого прямоугольника на изображении.Моя проблема в том, что когда я рисую этот прямоугольник 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())

Спасибо заранее.

1 Ответ

0 голосов
/ 13 июня 2018

QMouseEvent.pos () возвращает позицию события относительно виджета, который ловит событие.Таким образом, в зависимости от того, где находится ваша метка, это может быть не то, что вам нужно.

Аналогично, QLabel.pos () возвращает позицию метки относительно виджета, в котором она расположена

Попробуйте сравнитьположение метки с помощью self.myimagelabel.pos () с положением события мыши

я предполагаю, что вам нужно будет сделать что-то вроде labelPos = myimagelabel.pos () - eventQMouseEvent.pos () дляполучить координаты события, относящиеся к изображению

, только предположение, хотя минимальный рабочий пример поможет

Еще одна вещь, которую можно попробовать, - это создать подкласс QLabel и реализовать qmousepressevent.Подобно тому, что они делают здесь

...