c++ - 不依赖鼠标的QTooltip

标签 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 显示并保持在那里直到我想将其关闭??

最佳答案

工具提示只会在 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/

相关文章:

c++ - 我如何在 Qt 中从 Internet 下载文件?

c++ - QComboBox 项目文本可以包含 2 种颜色吗?

c++ - 如何将N位写入QByteArray

c++ - 如何正确处理 QThread 中长时间运行的任务的信号和事件

c++ - 有人可以为我解释一下这个 "endian-ness"函数吗?

c++ - 模板类重载赋值运算符自赋值测试VC++ Express 2010报错

c++ - 如何配置 Qt 以使用 SQLite?

c++ - 使用 Qt5 进行离屏渲染(openGL)

c++ - 不可能的隐式 move 操作?

c++ - crtdbg 在使用 sf::Text::setOutlineThickness 时转储内存泄漏