如何在qgraphicstextitem的文本中检查Wheelevent的位置?
-
09-10-2019 - |
题
我有一个 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),因此您可以更好地控制该项目坐标系统中文本的位置。
不隶属于 StackOverflow