我有一个QGraphicsTextItem
子类接受鼠标事件(即实现wheelEvent()
方法。
如何确定车轮事件发生在文本中的哪个位置?我想得到轮子事件发生时鼠标指针指向的字母。
BTW:一种可能的解决方案是创建一系列QGraphicsTextItem
个对象 - 每个字母一个。这样每个字母都可以接受它自己的事件,但是我放弃了所有的字距和其他排版复杂性。
答案 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>