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

如何检查轮式事件发生的文本中的哪个位置?我想得到鼠标指针指向车轮事件发生的字母。

顺便说一句:一种可能的解决方案是创建一系列 QGraphicsTextItem 物体 - 每个字母一个。这样,每个字母都可以接受它自己的事件,但是我将所有的kerning和其他排版的精致丢失。

有帮助吗?

解决方案

要获得鼠标位置,您可以使用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),因此您可以更好地控制该项目坐标系统中文本的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top