Frage

Ich habe eine QGraphicsTextItem Unterklasse, die Mausereignisse akzeptiert (das heißt Geräte wheelEvent() Verfahren.

Wie kann ich auf der Position überprüfe im Text das Rad-Ereignis passiert? Ich möchte den Brief bekommen, dass der Mauszeiger zeigte auf, wenn das Rad-Ereignis passiert ist.

BTW: Eine mögliche Lösung ist es, eine Reihe von QGraphicsTextItem Objekte erstellen - eine für jeden Buchstaben. Auf diese Weise ist jeder Buchstabe seine eigene Veranstaltungen annehmen können, aber ich verlieren alle das Kerning und andere Satz- Raffinesse.

War es hilfreich?

Lösung

die Mausposition zu erhalten, können Sie QWheelEvent verwenden :: Pos.

Ich sehe keine API, um den Brief zu einem bestimmten QPointF in dem Artikel zu erhalten. Sie könnten versuchen, eine vielleicht gut genug Annäherung obwohl mit QFontMetricsF zu bekommen, so etwas wie

tun
 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

Wenn das nicht funktioniert, können Sie mit einem benutzerdefinierten Textelement versuchen, wo Sie die Malerei tun (QPainter :: drawText) selbst, so dass Sie mehr Kontrolle über die Positionierung des Textes in dem Koordinatensystem des Artikels haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top