Добрый день, возникла следующая проблема:
Имеется класс, унаследованный от QGraphicsItem, в котором рисую ломанную стрелку(от А к B) с использованием QPainterPath
this->setPos(A->scenePos());//A - указатель на 1 элемент B - на второй
QPointF p0 = A->boundingRect().topRight()+QPointF(0,10);
QPainterPath path(p0);//Начало PainterPath
int dy = B->pos().y()-A->pos().y();
int dx = B->pos().x()-(A->pos().x()+A->boundingRect().topRight().x());
//В зависимости от dx и dy линия рисуется по разному
if((dx>=0)&&(dy>0))
{
QPointF p1(p0+QPointF(dx,0));//Линия вправо
path.lineTo(p1);
QPainterPath path2(p1);
QPointF p2(p1+QPointF(0,dy-10));//Линия вниз
path2.lineTo(p2);
path |=path2;
QPolygonF polygon;
polygon << QPoint( p2.x()-3, p2.y()-10 );
polygon << p2;
polygon << QPoint( p2.x()+3, p2.y()-10 );
QPainterPath path3;
path3.addPolygon(polygon);
path.addPath(path3);// Стрелка
}
...//Остальные варианты
currentPath = path;
painter->drawPath(currentPath);
Переопределены
QPainterPath LinkItem::shape() const
{
return currentPath;
}
QRectF LinkItem::boundingRect() const
{
return shape().boundingRect();
}
Унаследовался от класса сцены и переопределил mouse евенты.
void WorkScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
...//Обработка мыши
QGraphicsScene::mousePressEvent(event);
}
Собственно, в mousepress есть строчка
itemAt(event->scenePos()), возвращает 0 - если нет итемов на сцене
Щелкая по стрелке, данная функция всегда возвращает 0, кроме случая, когда щелкаю по самой стрелке (Polygon который в painter)
С обычными стандратными итемами(прямоугольник, круг и т.д) таким проблем нет
Может кто сталкивался с подобной проблемой?
P.S В классе стрелки корректно обрабатываются hoverEnterEvent и hoverLeaveEvent и т.д
void LinkItem::hoverEnterEvent(QGraphicsSceneHoverEvent *)
{
this->setCursor(Qt::PointingHandCursor);
this->setZValue(1);
this->pen.setColor(Qt::white);
}