我目前正在尝试在小部件的 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 显示并保持在那里直到我想将其关闭??
最佳答案
工具提示只会在 QHelpEvent
被拦截时显示。虽然您可以使用 QCoreApplication::PostEvent
和子类 QWidget::event
像这样从 focusOutEvent
发送一个
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) 工具提示仅在相应的小部件获得焦点时才处于事件状态。因此,在失去焦点时显示工具提示只会显示几秒钟,直到处理下一个事件循环。
后者可能有一个解决方法,但在这一点上,最好让工具提示保留其预期目的并实现您自己的伪工具提示,您可以直接控制它。
关于c++ - 不依赖鼠标的QTooltip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398883/