Wie Position eines wheelEvent innerhalb Text eines QGraphicsTextItem überprüfen?
-
09-10-2019 - |
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.
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.