Domanda

Ho una sottoclasse QGraphicsTextItem che accetta eventi del mouse (vale a dire attrezzi wheelEvent() metodo.

Come faccio a verificare su quale posizione all'interno del testo l'evento ruota di successo? Vorrei ottenere la lettera che il puntatore del mouse puntato quando l'evento ruota di successo.

A proposito: una possibile soluzione è quella di creare una serie di oggetti QGraphicsTextItem - uno per ogni lettera. In questo modo ogni lettera può accettare che sia propri eventi, ma ho sciolto tutta la crenatura e altri sofisticazione composizione.

È stato utile?

Soluzione

Per ottenere la posizione del mouse, è possibile utilizzare QWheelEvent :: pos.

Non vedo alcuna API per ottenere la lettera in un dato QPointF nella voce. si potrebbe cercare di ottenere una buona approssimazione forse sufficiente usando QFontMetricsF però, facendo qualcosa di simile

 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

Se questo non dovesse funzionare, si potrebbe provare con un elemento di testo personalizzato dove si fa il dipinto (QPainter :: drawText) da soli, in modo da avere un maggiore controllo sul posizionamento del testo nel sistema di coordinate del punto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top