2011-10-11 15 views
5

Estoy usando un QGraphicsPolygonItem y he notado que siempre conecta el punto final con el punto de inicio.QGraphicsPolygonItem dibujando un polígono abierto (no cerrado)

Sé que los términos del polígono significa exactamente eso, y lo que estoy buscando es "polilínea" o "cadena poligonal". No encontré nada parecido en las subclases QGraphicsItem.

¿Cómo se dibuja una cadena poligonal en QGraphics Framework? ¿Hay alguna propiedad de QGraphicsPolygonItem o una clase que lo haga?

Respuesta

3

Puede usar QPainterPath y usar el método lineTo para ingresar los puntos de su polilínea, luego simplemente use QGraphicsPathItem para convertirlo en un elemento gráfico.

Alternativamente, también podría pensar en combinar varios QGraphicsLineItem en un solo QGraphicsItemGroup, pero eso es más difícil ya que debe prestar atención a la alineación de líneas.

¿Esto es lo que estás buscando?

EDIT:

QPainterPath está aparentemente cerrando caminos, entonces se quedan con el grupo de sólo líneas.

Edit2:

Lo siento por la confusión, pero HostileFork parecen estar bien - sólo tiene que utilizar QPainterPath y llamar pathItem->setBrush(QBrush(Qt::transparent)); para mantener su camino sin llenar.

+0

QPainterPath no cierra rutas de acceso automáticamente, por lo que utilizar una secuencia de lineTo y moveTo es probablemente el mejor enfoque. Usted puede estar confundido debido a un relleno? Si no quiere un relleno, debe llamar a 'pathItem-> setBrush (QBrush (Qt :: transparent));' – HostileFork

2

Tuve un problema similar y lo resolví utilizando la clase QGraphicsPathItem. En el siguiente código, polígono es un objeto no cerrado QPolygonF (es decir, un QPolygonF que parten de punto es diferente de su punto final):

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

Cuando se muestra este objeto QGraphicsPathItem, el punto de inicio es (en teoría) desconectado de su punto final.

Lo siento, este código de ejemplo está en Java; pero los mecanismos deberían ser los mismos que en C++.

Cuestiones relacionadas