Pregunta

Tengo una subclase QGraphicsTextItem que acepta eventos de ratón (método es decir implementos wheelEvent().

¿Cómo puedo comprobar en qué posición dentro del texto del caso de la rueda pasó? Me gustaría obtener la carta que el puntero del ratón apuntando a la rueda cuando el evento ocurrió.

Por cierto: una posible solución es crear una serie de objetos QGraphicsTextItem - una para cada letra. De esta manera cada letra puede aceptar es propios eventos, pero perder todo el perfil fuera de línea y otra sofisticación archivos de texto.

¿Fue útil?

Solución

Para obtener la posición del ratón, se puede utilizar QWheelEvent :: pos.

No veo ninguna API para obtener la letra a la QPointF dada en el artículo. usted podría tratar de obtener una buena aproximación tal vez lo suficientemente usando QFontMetricsF sin embargo, hacer algo como

 const int wx = wheelEvent->pos().x(); //might have to map to item coordinates
 const qreal leftX = item->boundingRect().left();
 const QFontMetricsF fm( item->font() );
 int pos = 0;
 while ( fm.width( text.left( pos ) - leftX < wx )
      pos++; //could be optimized by something binary-search-like

Si eso no funciona, usted podría tratar con un elemento de texto personalizado en el que hacer la pintura (QPainter :: drawText) a sí mismo, para que tenga más control sobre el posicionamiento del texto en el sistema de coordenadas del elemento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top