Уведомления

Группа в Telegram: @pythonsu

#1 Май 12, 2011 13:15:01

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 QGraphicsItem не ловит mouseMoveEvent

Господа, помогите решить проблему.

Есть такой объект, который кидаю на сцену:

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 смотрел, но так и не понял в чем дело.

Спасибо.



Офлайн

#2 Май 12, 2011 13:29:21

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 QGraphicsItem не ловит mouseMoveEvent

О! Нашел флаг QtGui.QGraphicsItem.ItemIsMovable. Вроде заработало. Осталось сделать нормальное перетаскивание по сцене.



Офлайн

#3 Май 12, 2011 13:46:20

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 QGraphicsItem не ловит mouseMoveEvent

Ндя, как все оказывается просто:

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) #передаем событие дальше, чтоб таскалось



Офлайн

#4 Май 12, 2011 14:03:02

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 QGraphicsItem не ловит mouseMoveEvent

Поторопился.
QGraphicSceneItem не имеет метода emit :-(

Подскажите, как сделать такую штуку:
На сцене есть линия, а на ее концах - два маркера. Двигаю маркеры и линия тоже вслед за ними перерисовывается.
Хочется сделать все на стандартных сигналах/слотах.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version