如何在QGraphicsTextItem的文本中检查wheelEvent的位置?

时间:2011-01-09 17:24:08

标签: qt mousewheel qgraphicsview qgraphicstextitem

我有一个QGraphicsTextItem子类接受鼠标事件(即实现wheelEvent()方法。

如何确定车轮事件发生在文本中的哪个位置?我想得到轮子事件发生时鼠标指针指向的字母。

BTW:一种可能的解决方案是创建一系列QGraphicsTextItem个对象 - 每个字母一个。这样每个字母都可以接受它自己的事件,但是我放弃了所有的字距和其他排版复杂性。

1 个答案:

答案 0 :(得分:1)

要获得鼠标位置,可以使用QWheelEvent :: pos。

我没有看到任何API来获取该项目中给定QPointF的字母。你可以尝试使用QFontMetricsF获得一个可能足够好的近似值,比如

 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

如果不能解决问题,您可以尝试自己进行绘画的自定义文本项目(QPainter :: drawText),这样您就可以更好地控制项目坐标系中文本的位置。 / p>