2011-10-11 18 views
5

Sto utilizzando un QGraphicsPolygonItem e ho notato che collega sempre il punto finale con il punto iniziale.QGraphicsPolygonItem disegno di un poligono aperto (non chiuso)

So che i termini poligono significano esattamente questo, e quello che cerco è "polilinea" o "catena poligonale". Non ho trovato nulla di simile nelle sottoclassi di QGraphicsItem.

Come si disegna una catena poligonale in QGraphics Framework? Esiste una proprietà di QGraphicsPolygonItem o di una classe che lo fa?

risposta

3

È possibile utilizzare QPainterPath e utilizzare il metodo lineTo per inserire punti polilinea yors, quindi utilizzare semplicemente QGraphicsPathItem per trasformarlo in elemento grafico.

In alternativa si potrebbe anche pensare che combina diversi QGraphicsLineItem in una QGraphicsItemGroup, ma questo è più difficile in quanto è necessario prestare attenzione ad allineare le linee insieme.

È questo quello che stai cercando?

EDIT:

QPainterPath è apparentemente chiudendo i percorsi, poi si sono lasciati con un gruppo di solo linee.

EDIT2:

Ci scusiamo per confondere, ma HostileFork sembrano essere di destra - basta usare QPainterPath e chiamare pathItem->setBrush(QBrush(Qt::transparent)); per mantenere il vostro percorso vacanti.

+0

QPainterPath non chiude automaticamente i percorsi, quindi l'utilizzo di una sequenza di lineTo e moveTo rappresenta probabilmente l'approccio migliore. Potresti essere confuso a causa di un riempimento? Se non vuoi un riempimento, devi chiamare 'pathItem-> setBrush (QBrush (Qt :: transparent));' – HostileFork

2

Ho avuto un problema simile e l'ho risolto utilizzando la classe QGraphicsPathItem. Nel seguente codice, poligono è un oggetto non chiuso QPolygonF (cioè un QPolygonF che start-punto è diverso dal suo punto finale):

QPainterPath path = new QPainterPath(); 
path.addPolygon(polygon); 
QGraphicsPathItem contour = new QGraphicsPathItem(path); 
contour.setPen(new QPen(QColor.black)); 

Quando si visualizzano questo oggetto QGraphicsPathItem, il punto di start è (in teoria) disconnesso dal suo punto finale.

Mi dispiace questo codice di esempio è in Java; ma i meccanismi dovrebbero essere gli stessi del C++.

Problemi correlati