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

Qt 如何检查wheelEvent在QGraphicsTextItem文本中的位置?,qt,mousewheel,qgraphicsview,qgraphicstextitem,Qt,Mousewheel,Qgraphicsview,Qgraphicstextitem,我有一个接受鼠标事件的QGraphicsTextItem子类(即实现wheeleevent()方法) 如何检查wheel事件发生在文本中的哪个位置?我想获取wheel事件发生时鼠标指针指向的字母 顺便说一句:一个可能的解决方案是创建一系列的QGraphicsTextItem对象——每个字母一个。这样每个字母都可以接受自己的事件,但我失去了所有的紧排和其他排版复杂性。要获得鼠标位置,可以使用QWheelEvent::pos 我没有看到任何API可以在项目中的给定QPointF处获取字母。不过,您可

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

如何检查wheel事件发生在文本中的哪个位置?我想获取wheel事件发生时鼠标指针指向的字母


顺便说一句:一个可能的解决方案是创建一系列的
QGraphicsTextItem
对象——每个字母一个。这样每个字母都可以接受自己的事件,但我失去了所有的紧排和其他排版复杂性。

要获得鼠标位置,可以使用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
const int wx=wheeleevent->pos().x();//可能必须映射到项目坐标
const qreal leftX=item->boundingRect().left();
常量QFontMetricsF fm(项->字体());
int pos=0;
while(调频宽度(文本左侧(位置)-leftX

如果这不起作用,您可以尝试使用自定义文本项,您可以自己绘制(QPaint::drawText),这样您就可以更好地控制文本在项目坐标系中的位置。

听起来很合理。如果这在实践中有意义,我会尝试。