Te0reTiK
19.8.2011, 23:05
Доброго времени суток, $coder!
Пишу небольшое приложение-тренажнр для разучивания нот в скрипичном ключе.
Прога содержит QGraphicsScene, который отображает клавиши фортепиано - элементы QGraphicsPolygonItem.
Требуется при нахождении курсора мыши над объектом-клавишей, чтобы эта самая клавиша подсвечивалась каким-либо способом (буду менять QBrush)
В общем, вроде того, когда подводишь курсор на обычную кнопку окна, эта кнопка слегка подсвечивается - требуется тоже самое
Вот только отловить событие перемещения мыши над QGraphicsPolygonItem ну ни как не получается.
Посоветуйте дельное решение
RazrFalcon
20.8.2011, 0:38
Сделайте наследника QGraphicsPolygonItem и предопределите функцию hoverEnterEvent(QGraphicsSceneHoverEvent * event)
Te0reTiK
20.8.2011, 10:26
Цитата(RazrFalcon @ 20.8.2011, 1:38)
Сделайте наследника QGraphicsPolygonItem и предопределите функцию hoverEnterEvent(QGraphicsSceneHoverEvent * event)
к сожалению, не работает
python-фрагмент:
class PianoKey(QtGui.QGraphicsPolygonItem):
def __init__(self, *args):
super(PianoKey, self).__init__(*args)
def hoverEnterEvent(self, event):
print event
return super(lkey, self).hoverEnterEvent(event)
нашел решение в setMouseTracking:
gview = QtGui.QGraphicsView()
gview.setScene(piano.PianoScene())
gview.setMouseTracking(True)
а вот обработчик:
class PianoScene(QtGui.QGraphicsScene):
def mouseMoveEvent(self, event):
if event.type()==QtCore.QEvent.GraphicsSceneMouseMove:
print str(self.itemAt(event.scenePos()))
s = str(event.scenePos().x())+', '+str(event.scenePos().y())
self.lb.setText(s)
return super(PianoScene, self).mouseMoveEvent(event)
Есть какие-либо другие решения?