qt - 如何检测 Qt 中工具提示内的鼠标单击?

标签 qt event-handling tooltip

我有一个 Qt 应用程序,如果某个内部条件发生,其中某些 QLabel 会显示工具提示。

由于工具提示有超时并被 Qt 自动隐藏,应用程序通过每 3 秒显示一次工具提示来保持工具提示有效(我没有找到任何机制告诉 Qt 无限期地显示工具提示)。

工具提示一直显示到用户单击 QLabel 本身:工具提示不再刷新并消失。

我现在有一个新要求,如果用户点击工具提示本身,工具提示也应该消失。当用户单击可见的工具提示时是否会发送信号?或者是否有必要使用一些更复杂的技术?

编辑

我再次检查了我的代码,这里有一些额外的信息。

Qt 确实检测到鼠标单击工具提示并将其隐藏,但应用程序会立即再次显示工具提示。 我想要做的是 Qt 将鼠标单击事件通知我的代码,以便它一次又一次地停止显示工具提示。我有两种可能的解决方案,但我不知道它们在技术上是否可行:

  1. 移除工具提示超时:显示工具提示时,只要用户不点击它,它就会保持可见。如何在 Qt 中显示没有超时的工具提示?
  2. 通过反复显示来保持工具提示可见;检测在工具提示上单击鼠标以停止保持事件循环。如何在用户点击工具提示时收到信号?

最佳答案

在幕后,实现工具提示的实际类是一个名为 QTipLabel 的私有(private) QLabel 派生类:

http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/kernel/qtooltip.cpp#line119

界面中没有发布任何内容来从 QToolTip 获取该类的实例,因此拦截点击只能通过某种不明智的 hack 来完成。

就是说:在应该“立即隐藏提示”的事件中有 QEvent::mouseButtonPress...事实上,安装了一个事件过滤器,这样任何点击应用程序将隐藏它:

http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/kernel/qtooltip.cpp#line325

因此,如果您没有看到工具提示在被单击时消失,则说明存在错误。 (在 Kubuntu 下基于 Qt 的应用程序中,单击工具提示会为我隐藏它们。)

关于qt - 如何检测 Qt 中工具提示内的鼠标单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520605/

相关文章:

javascript - Joomla 中包含 HTML 的工具提示

c++ - QThread::sleep() 是否需要运行事件循环?

css - 为工具提示设置不同的属性

qt - 如何从qtquick控件2.3自定义ScrollView

c++ - wxWidgets - 事件表与 Connect()?

javascript - 如何在 Svelte 中正确包装第三方组件

javascript - 为什么事件监听器无法读取属性?

css - 丰富的 :tooltip set background color

c++ - OpenCV 3 似乎不适用于 Qt

c++ - QT Moc文件的改变大小写