不依赖鼠标的QToolTip

QTooltip that does not depend on mouse

本文关键字:QToolTip 鼠标 依赖      更新时间:2023-10-16

我当前正在尝试在窗口小部件的focusoutevent上显示一个工具提示。该工具提示基本上验证了小部件内部的数据(qlineedit)。现在问题是我想使用工具提示显示错误或问题。这是我在做的

void MyLineEdit::focusOutEvent(QFocusEvent *e)
{
  QLineEdit::focusOutEvent(e);
  QToolTip::showText( this->mapToGlobal( QPoint( 0, 0 ) ), "Something got it" );
  emit(focussed(false));
}

现在问题是未显示qtooltip,这可能是因为鼠标正在移动。我的问题是如何将qtooltip显示并保留在那里,直到我希望将其关闭?

仅当QHelpEvent被拦截时,工具提示才会显示。虽然您可以使用QCoreApplication::PostEvent和子类QWidget::eventfocusOutEvent发送一个

bool MyLineEdit::event (QEvent *event)
{
    if (event->type() == QEvent::ToolTip) {
         QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
         QToolTip::showText(helpEvent->globalPos(), "Something got it");
         return false;
     }
     return QWidget::event(event);
}

,这有两个不良后果。

1)每当要在工具提示正常显示时(即,当鼠标指针在窗口小部件上停留几秒钟时),该事件仍会触发。您将必须实施某种识别机制,以将自己的帮助活动与其他事件区分开。

2)工具提示仅在相应的小部件聚焦时活跃。因此,在丢失焦点时显示工具提示只会显示几秒钟,直到处理下一个事件循环为止。

后者可能会有解决方法,但是在这一点上,最好将工具提示以其预期的目的离开工具,并实现您自己的伪tooltip。