2015-09-06 10 views
1

https://www.dropbox.com/s/phven3rriv36893/graphicsview-pathitem.png?dl=0 Интересно, есть ли способ заставить мой QGraphicsPathItem реагировать на mouseHoverEvents на фактическую кривую, а не на всю оранжевую область, как показано в документах.QGraphicsPathItem hoverEvents - подавление зависания на области, образованной путем

https://www.dropbox.com/s/7m8w34nitp34sgf/pipes.png?dl=0 В моем приложении я не вижу, область, которая на самом деле формирует путь, и для этого я только хочу hoverEnterEvent, когда кривая Безье наведен (и hoverLeaveEvent когда Безье осталось, конечно).

Этого можно достичь с помощью QGraphicsPathItem или это совершенно неправильный подход? Если да, то как? Если нет, то какой объект QGraphics можно рассматривать как замену?

Если код действительно необходим, дайте мне знать.

Cheers, Майкл

ответ

0

Вы должны переопределять QGraphicsItem.shape вернуть более точное представление о вашей кривой. Реализация по умолчанию дает вам ограничительную рамку, как вы обнаружили.

2

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

Это еще более запутанно, потому что в этом случае QGraphicsPathItem уже может предоставить QPainterPath из своего метода path(). К сожалению, это, как правило, неверное значение для возврата из метода shape(), поскольку оно рисует элемент, а не ограничивает его внешний вид.

К счастью, поскольку это довольно стандартное требование, существует встроенный класс для преобразования пути в контур, который может использоваться для формы: QPainterPathStroker.

Вот код, я использую, чтобы сделать это:

qp = QtGui.QPainterPathStroker() 
    qp.setWidth(MARGIN) 
    qp.setCapStyle(QtCore.Qt.SquareCap) 
    shape = qp.createStroke(self.path()) 

 Смежные вопросы

  • Нет связанных вопросов^_^