elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda]Crear un arrow con GraphicsView de Qt
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda]Crear un arrow con GraphicsView de Qt  (Leído 1,565 veces)
SLUGER

Desconectado Desconectado

Mensajes: 46


...


Ver Perfil WWW
[Ayuda]Crear un arrow con GraphicsView de Qt
« en: 3 Octubre 2011, 04:57 am »

En el siguiente codigo tengo implementado una flecha que une dos figuras(shapes). Esta flecha esta dividida por dos secciones; La primera es la linea en si, la que une a las dos figuras y la segunda es la cabeza de flecha o el apuntador.

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
  1. QLineF::IntersectType intersectType =
  2.         polyLine.intersect(centerLine, &intersectPoint);



Aqui el codigo de la funcion paint:
Código
  1. {
  2.    painter->setPen(QPen(Qt::black, 2));
  3.    painter->setBrush(QBrush(Qt::black, Qt::SolidPattern));
  4.  
  5. // Line
  6.    // El primer punto se localiza en el centro del primer elemento
  7.    QPointF p1(_firstShape->pos().x() + (_firstShape->boundingRect().width() / 2),
  8.               _firstShape->pos().y() + (_firstShape->boundingRect().height() / 2));
  9.  
  10.    // El segundo punto se localiza en el centro del segundo elemento
  11.    QPointF p2(_secondShape->pos().x() + (_secondShape->boundingRect().width() / 2),
  12.               _secondShape->pos().y() + (_secondShape->boundingRect().height() / 2));
  13.  
  14.    // Creamos la linea
  15.    QLineF line(p1, p2);
  16.  
  17.    // Dibujamos la linea
  18.    painter->drawLine(line);
  19.  
  20. // Arrow Head
  21.    double angle = ::acos(line.dx() / line.length());
  22.    if (line.dy() >= 0)
  23.        angle = TwoPi - angle;
  24.    qreal arrowSize = 10;
  25.  
  26.    // Calculamos los dos puntos de la arrow head
  27.    QPointF destArrowP1 = p2 + QPointF(sin(angle - Pi / 3) * arrowSize,
  28.                                              cos(angle - Pi / 3) * arrowSize);
  29.    QPointF destArrowP2 = p2 + QPointF(sin(angle - Pi + Pi / 3) * arrowSize,
  30.                                              cos(angle - Pi + Pi / 3) * arrowSize);
  31.  
  32.    // Dibujamos la arrow head
  33.    painter->drawPolygon(QPolygonF() << line.p2()/*[0]*/ << destArrowP1 << destArrowP2);
  34.    // Simplemente cambiando line.p2() por el punto de interseccion estaria solucionado el problema
  35. }

Resultado del codigo:

Como pueden ver solo se puede ver un apuntador porque los otros estan ocultos por el elemento.

Saludos, Sluger.


« Última modificación: 3 Octubre 2011, 05:01 am por SLUGER » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda a crear CD autoejecutable
Multimedia
Leodark 2 2,329 Último mensaje 15 Marzo 2005, 04:42 am
por Leodark
Ayuda con crear un .bat
Scripting
N@5h 3 2,515 Último mensaje 12 Septiembre 2008, 00:57 am
por Darioxhcx
Arrow Elf Bowling 7 1/7: The Last Insult(Pc) Remover Formato de Texto Negrit
Juegos y Consolas
luchodoc 0 1,247 Último mensaje 14 Noviembre 2008, 21:40 pm
por luchodoc
[Ayuda] Necesito ayuda para crear un buen video uso AF y Flash.
Diseño Gráfico
XXXXXX 1 5,437 Último mensaje 11 Noviembre 2009, 00:17 am
por Sub_Cero
[Ayuda] 29 Errores cuando quiero crear una dll ayuda!
Programación Visual Basic
polacko2010 5 2,437 Último mensaje 1 Diciembre 2010, 13:44 pm
por raul338
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines