我目前正在尝试在小部件的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显示并保存在那里直到我想关掉它?
答案 0 :(得分:1)
工具提示只会在QHelpEvent
被截获时显示。虽然您可以使用focusOutEvent
和QCoreApplication::PostEvent
这样的QWidget::event
从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}}
,这有两个不良后果。
1)只要正常显示工具提示(即鼠标指针停留在窗口小部件上几秒钟),事件仍会被触发。您必须实施某种识别机制,以区分自己的帮助事件。
2)工具提示仅在关注相应窗口小部件时才处于活动状态。因此,在焦点丢失时显示工具提示只会显示几秒钟,直到处理完下一个事件循环。
后者可能有一种解决方法,但在这一点上,最好将工具提示留作其预期用途,并实现您自己直接控制的伪工具提示。