Bonsoir tout le monde,

Je rencontre actuellement un petit problème pour sélectionner un élément QGraphicsPathItem de ma scène.

Je l'ai défini de la façon suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Polyline::Polyline(QPainterPath &path, QGraphicsItem *parent) : QGraphicsPathItem(parent)
{
  this->setFlag(QGraphicsItem::ItemIsFocusable);
  this->setFlag(QGraphicsItem::ItemIsSelectable);
  this->setFlag(QGraphicsItem::ItemIsMovable);
 
  this->setPath(path);
  this->polylineWidth = 2;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void Polyline::addPoint(QPointF pos)
{
  QPainterPath path(this->path());
  path.lineTo(pos);
  this->setPath(path);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Polyline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
  QPen pen(Qt::black);
  pen.setWidth(this->polylineWidth);
  painter->setPen(pen);
  painter->drawPath(this->path());
}
 
QRectF Polyline::boundingRect() const
{
  return QRectF(QPointF(0,0), QPointF(0,0));
}
 
QPainterPath Polyline::shape() const
{
  QPainterPath path(this->path());
 
  return path;
}
Lorsque je clic dans ma scène, sur un QGraphicsPathItem déjà créé, impossible de sélectionner l'élément via les segments qui le constituent.

ça doit être dû au boundingRect() dans lequel je renvois un rect((0,0),(0,0)).

Vous allez donc me répondre de changer cette valeur pour pouvoir sélectionner l'objet là ou je le souhaite. Mais justement, si j'ai d'abord mis le rect à 0, c'est pour la simple raison que la zone qu'il semble définir par défaut est le polygone définit par l'ensemble des sommets du chemin. Ce qui me pose un problème car je ne peux pas revenir créer un point de mon QGraphicsPathItem à l'intérieur de ce polygone, sinon, il n'y a pas de création car l'objet en question est sélectionné..

Un problème similaire serait par exemple de vouloir créer un premier QGraphicsPathItem et d'en créer un autre dont l'un des points se situeraient à l'intérieur du polygone définit par l'ensemble des sommets du premier QGraphicsPathItem, ce qui, encore une fois, semble impossible étant donné que le clic sélectionnera plutôt le premier item plutôt que de créer un nouveau point du deuxième item.

Je ne sais pas si je suis assez clair. En gros, je cherche à pouvoir sélectionner mon QGraphicsPathItem en cliquant sur l'un de ses segments tout en ayant une zone de sélection qui reste concentrée sur ses segments et ne s'étend par à une plus grande zone comme le polygone qu'il pourrait définir, empêchant alors d'autres créations à l'intérieur de celui-ci.

Auriez-vous des idées ?

Merci :-)