Question

J'ai une sous-classe de QGraphicsTextItem qui accepte la méthode des événements de souris (à savoir des outils wheelEvent().

Comment puis-je vérifier sur quelle position dans le texte de l'événement roue est arrivé? Je voudrais obtenir la lettre que le pointeur de la souris pointée sur lorsque l'événement est arrivé roue.

BTW: une solution possible est de créer une série d'objets QGraphicsTextItem - un pour chaque lettre. De cette façon, chaque lettre peut accepter ses propres événements, mais je lâche tout le crénage et d'autres sophistication de photocomposition.

Était-ce utile?

La solution

Pour obtenir la position de la souris, vous pouvez utiliser QWheelEvent :: pos.

Je ne vois aucune API pour obtenir la lettre à un QPointF donné dans l'élément. vous pouvez essayer d'obtenir une approximation assez bon peut-être en utilisant QFontMetricsF cependant, faire quelque chose comme

 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 cela ne fonctionne pas, vous pouvez essayer avec un élément de texte personnalisé où vous faites la peinture (QPainter :: drawText) vous, vous avez plus de contrôle sur le positionnement du texte dans le système de coordonnées de l'élément.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top