La linea de la primera sección es dibujada desde el centro del primer elemento hasta el centro del segundo elemento.
La punta principal del apuntador esta posicionada en el centro del segundo elemento. /*[0]*/
/*[0]*/ Este es el problema, si el elemento en el cual se encuentra el apuntador es demasiado grande, el apuntador podria no mostrarse. Por ejemplo:
En el ejemplo el elemento fue configurado para que el color de rellenado fuera transparente y se pudiera ver el apuntador, en otro caso no se veria el apuntador.
Bueno entonces que es lo que pido? Lo que quiero saber es si es posible de alguna forma identificar el punto de interseccion entre la linea de la primera sección y el segundo elemento. Como lo hacen en el ejemplo que viene con QtCreator llamado diagramscene, pero en este ejemplo utilizan la interseccion entre lineas y lo que yo necesito es una linea y alguna figura.
Código
QLineF::IntersectType intersectType = polyLine.intersect(centerLine, &intersectPoint);
Aqui el codigo de la funcion paint:
Código
{ painter->setPen(QPen(Qt::black, 2)); painter->setBrush(QBrush(Qt::black, Qt::SolidPattern)); // Line // El primer punto se localiza en el centro del primer elemento QPointF p1(_firstShape->pos().x() + (_firstShape->boundingRect().width() / 2), _firstShape->pos().y() + (_firstShape->boundingRect().height() / 2)); // El segundo punto se localiza en el centro del segundo elemento QPointF p2(_secondShape->pos().x() + (_secondShape->boundingRect().width() / 2), _secondShape->pos().y() + (_secondShape->boundingRect().height() / 2)); // Creamos la linea QLineF line(p1, p2); // Dibujamos la linea painter->drawLine(line); // Arrow Head double angle = ::acos(line.dx() / line.length()); if (line.dy() >= 0) angle = TwoPi - angle; qreal arrowSize = 10; // Calculamos los dos puntos de la arrow head QPointF destArrowP1 = p2 + QPointF(sin(angle - Pi / 3) * arrowSize, cos(angle - Pi / 3) * arrowSize); QPointF destArrowP2 = p2 + QPointF(sin(angle - Pi + Pi / 3) * arrowSize, cos(angle - Pi + Pi / 3) * arrowSize); // Dibujamos la arrow head painter->drawPolygon(QPolygonF() << line.p2()/*[0]*/ << destArrowP1 << destArrowP2); // Simplemente cambiando line.p2() por el punto de interseccion estaria solucionado el problema }
Resultado del codigo:
Como pueden ver solo se puede ver un apuntador porque los otros estan ocultos por el elemento.
Saludos, Sluger.