Найти - Пользователи
Полная версия: PyQt4 QGraphicsItem не ловит mouseMoveEvent
Начало » GUI » PyQt4 QGraphicsItem не ловит mouseMoveEvent
1
aaleksander
Господа, помогите решить проблему.

Есть такой объект, который кидаю на сцену:
class Marker(QtGui.QGraphicsItem):
'тестовый крестик, который можно таскать'
def __init__(self, parent = None, scene = None):
QtGui.QGraphicsItem.__init__(self, parent, scene)
self.setAcceptDrops(True) #разрешаем таскать
self.setAcceptHoverEvents (True)
self.color = QtGui.QColor(0, 0, 0)
self.setCursor(QtCore.Qt.OpenHandCursor)

def paint(self, painter, option=None, widget=None):
'пока просто красный крестик'
painter.setPen(self.color)
line = QtCore.QLineF(QtCore.QPointF(-10, -10), QtCore.QPointF(10, 10))
painter.drawLine(line)
line = QtCore.QLineF(QtCore.QPointF(-10, 10), QtCore.QPointF(10, -10))
painter.drawLine(line)

def boundingRect(self):
return QtCore.QRectF(-10, -10, 20, 20)

def hoverMoveEvent(self, e):
self.color = QtGui.QColor(255, 0, 0)
self.update()

def hoverLeaveEvent (self, e):
self.color = QtGui.QColor(0, 0, 0)
self.update()

def mouseMoveEvent(self, e):
print '1'
hoverMoveEvent/hoverLeaveEvent отрабатывает нормально. А вот mouseMoveEvent - нивкакую. Даже отладчик туда не заходит.

Хочу сделать простое перетаскивание объекта по сцене. dragEnterEvent - тоже не ловится. Может я чего-то не понимаю?

Объект добавляю на сцену просто, в самой сцене ничего дополнительного не инициализирую:
        self.m = Marker()
self.scene.addItem(self.m)
self.m.setPos(50, 50)
P.S. Пример dragrobot смотрел, но так и не понял в чем дело.

Спасибо.
aaleksander
О! Нашел флаг QtGui.QGraphicsItem.ItemIsMovable. Вроде заработало. Осталось сделать нормальное перетаскивание по сцене.
aaleksander
Ндя, как все оказывается просто:
class Marker(QtGui.QGraphicsItem):
'тестовый крестик, который можно таскать'
def __init__(self, parent = None, scene = None):
QtGui.QGraphicsItem.__init__(self, parent, scene)
self.setAcceptDrops(True) #разрешаем таскать
self.setAcceptHoverEvents (True)
self.color = QtGui.QColor(0, 0, 0)
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

def paint(self, painter, option=None, widget=None):
'пока просто красный крестик'
painter.setPen(self.color)
line = QtCore.QLineF(QtCore.QPointF(-10, -10), QtCore.QPointF(10, 10))
painter.drawLine(line)
line = QtCore.QLineF(QtCore.QPointF(-10, 10), QtCore.QPointF(10, -10))
painter.drawLine(line)

def boundingRect(self):
return QtCore.QRectF(-10, -10, 20, 20)

def hoverMoveEvent(self, e):
self.color = QtGui.QColor(255, 0, 0)
self.update()

def hoverLeaveEvent (self, e):
self.color = QtGui.QColor(0, 0, 0)
self.update()

def mouseMoveEvent(self, e):
'тут будем отсылать сигнал другим элементам сцены'
QtGui.QGraphicsItem.mouseMoveEvent(self, e) #передаем событие дальше, чтоб таскалось
aaleksander
Поторопился.
QGraphicSceneItem не имеет метода emit :-(

Подскажите, как сделать такую штуку:
На сцене есть линия, а на ее концах - два маркера. Двигаю маркеры и линия тоже вслед за ними перерисовывается.
Хочется сделать все на стандартных сигналах/слотах.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB