Форум сайта python.su
Господа, помогите решить проблему.
Есть такой объект, который кидаю на сцену:
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'
self.m = Marker()
self.scene.addItem(self.m)
self.m.setPos(50, 50)
Офлайн
О! Нашел флаг QtGui.QGraphicsItem.ItemIsMovable. Вроде заработало. Осталось сделать нормальное перетаскивание по сцене.
Офлайн
Ндя, как все оказывается просто:
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) #передаем событие дальше, чтоб таскалось
Офлайн
Поторопился.
QGraphicSceneItem не имеет метода emit :-(
Подскажите, как сделать такую штуку:
На сцене есть линия, а на ее концах - два маркера. Двигаю маркеры и линия тоже вслед за ними перерисовывается.
Хочется сделать все на стандартных сигналах/слотах.
Офлайн