我有一个QGraphicsView
hows显示QGraphicsScene
,其中包含QGraphicsItem
。我的物品实现了激发hoverMoveEvent(...)
的QToolTip
方法。
我希望工具提示在鼠标移动到项目上方时跟随鼠标。但这只有在我做以下两件事之一时才有效:
QToolTip
s,其中第一个只是一个虚拟,并立即被第二个覆盖。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");
}
第三,解决方案提出here也有效。但是我不想显示坐标。工具提示的内容是静态的......
如何在没有描述闪烁的情况下通过创建两个工具提示或第二次更新提示的位置来完成此工作?
创建QTooltip
时,只要移动鼠标就会消失,为了没有这种行为,你可以使用QLabel
并启用Qt::ToolTip
标志。在你的情况下:
。H
private:
QLabel *label;
CPP
MyCustomItem::MyCustomItem(QGraphicsItem * parent):QGraphicsItem(parent)
{
label = new QLabel;
label->setWindowFlag(Qt::ToolTip);
[...]
}
在您要显示消息的位置之后,如果您想在hoverMoveEvent
中执行此操作,则应放置以下代码。
label->move(event->screenPos());
label->setText("Tooltip that follows the mouse");
if(label->isHidden())
label->show();
要隐藏它你必须使用:
label->hide();