QTooltip不依赖于鼠标

时间:2014-01-28 06:59:28

标签: c++ qt

我目前正在尝试在小部件的focusOutEvent上显示工具提示。此工具提示基本上验证了Widget(QLineEdit)中的数据。现在问题是我想使用工具提示显示错误或问题。这就是我正在做的事情

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

现在问题是QTooltip没有显示,可能是因为鼠标正在移动。我的问题是如何让QTooltip显示并保存在那里直到我想关掉它?

1 个答案:

答案 0 :(得分:1)

工具提示只会在QHelpEvent被截获时显示。虽然您可以使用focusOutEventQCoreApplication::PostEvent这样的QWidget::eventbool 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}}

,这有两个不良后果。

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

2)工具提示仅在关注相应窗口小部件时才处于活动状态。因此,在焦点丢失时显示工具提示只会显示几秒钟,直到处理完下一个事件循环。

后者可能有一种解决方法,但在这一点上,最好将工具提示留作其预期用途,并实现您自己直接控制的伪工具提示。