我有一个QGraphicsTextItem
接受鼠标事件的子类(即实现wheelEvent()
方法。
如何检查车轮事件发生在文本中的哪个位置?我想获得当滚轮事件发生时鼠标指针指向的字母。
顺便说一句:一种可能的解决方案是创建一系列QGraphicsTextItem
对象——每个字母一个。这样每个字母都可以接受它自己的事件,但我放松了所有字距调整和其他排版复杂性。
我有一个QGraphicsTextItem
接受鼠标事件的子类(即实现wheelEvent()
方法。
如何检查车轮事件发生在文本中的哪个位置?我想获得当滚轮事件发生时鼠标指针指向的字母。
顺便说一句:一种可能的解决方案是创建一系列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
如果这不起作用,您可以尝试使用自定义文本项,您自己在其中进行绘画 (QPainter::drawText),这样您就可以更好地控制文本在项目坐标系中的位置。