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

发布于 2024-10-11 10:13:50 字数 232 浏览 2 评论 0原文

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

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

:一种可能的解决方案是创建一系列 QGraphicsTextItem 对象 - 每个字母都可以接受。事件,但我放弃了所有的字距调整和其他排版复杂性。

I have a QGraphicsTextItem subclass that accepts mouse events (i.e. implements wheelEvent() method.

How can I check on which position within the text the wheel event happened? I would like to get the letter that the mouse pointer pointed at when the wheel event happened.

BTW: one possible solution is to create a series of QGraphicsTextItem objects -- one for every letter. This way each letter can accept it's own events, but I loose all the kerning and other typesetting sophistication.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百思不得你姐 2024-10-18 10:13:50

要获取鼠标位置,可以使用 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),这样你就有更多控制文本在项目坐标系中的位置。

To get the mouse position, you can use QWheelEvent::pos.

I don't see any API to get the letter at a given QPointF in the item. you could try to get a maybe good enough approximation using QFontMetricsF though, doing something like

 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

If that doesn't work out, you could try with a custom text item where you do the painting (QPainter::drawText) yourself, so you have more control over the positioning of the text in the item's coordinate system.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文