QToolTip应该跟随QGraphicsItem上的鼠标时的奇怪行为

时间:2017-06-24 12:42:20

标签: c++ qt qt5 qgraphicsitem qtooltip

我有一个QGraphicsView小时显示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也有效。但是我不想显示坐标。工具提示的内容是静态的......

如何在没有描述闪烁的情况下通过创建两个工具提示或第二次更新提示的位置来完成此工作?

1 个答案:

答案 0 :(得分:2)

创建

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();

请参阅:How to make QToolTip message persistent?