我有一个显示QGraphicsScene的QGraphicsView,其中包含一个QGraphicsItem。我的项目实现了hoverMoveEvent(...)方法,触发了一个QToolTip。我希望当鼠标在该项上移动时,工具提示会跟随鼠标移动。但是只有两种情况下才能实现:
1.创建两个QToolTips,其中第一个是虚拟的,并立即被第二个覆盖。
2.或者,使提示的内容随机,例如将rand()放入其文本中。
然而,这种实现并不像应该的那样工作。它让工具提示出现,但它不跟随鼠标移动。就好像它意识到它的内容没有改变,也不需要任何更新。
1.创建两个QToolTips,其中第一个是虚拟的,并立即被第二个覆盖。
2.或者,使提示的内容随机,例如将rand()放入其文本中。
然而,这种实现并不像应该的那样工作。它让工具提示出现,但它不跟随鼠标移动。就好像它意识到它的内容没有改变,也不需要任何更新。
void MyCustomItem::hoverMoveEvent(QGraphicsSceneHoverEvent *mouseEvent)
{
QToolTip::showText(mouseEvent->screenPos(), "Tooltip that follows the mouse");
}
这段代码可以实现预期的功能,即提示框会跟随鼠标移动。缺点是,由于创建了两个提示框,所以可能会出现轻微闪烁。
void MyCustomItem::hoverMoveEvent(QGraphicsSceneHoverEvent *mouseEvent)
{
QToolTip::showText(mouseEvent->screenPos(), "This is not really shown and is just here to make the second tooltip follow the mouse.");
QToolTip::showText(mouseEvent->screenPos(), "Tooltip that follows the mouse");
}
第三种解决方案是在这里提出的,也可以使用。然而,我不想显示坐标。提示框的内容是静态的...
如何使这个工作正常,而不必创建两个提示框或者更新提示框的位置,以避免上述描述的闪烁问题?
screenPos()
。否则,如果你向下移动鼠标,鼠标会落在标签上并离开项目。auto pos = event->screenPos(); pos += {0, 20};
- dani