Cómo comprobar la posición de un wheelEvent dentro del texto de un QGraphicsTextItem?
-
09-10-2019 - |
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.
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.