如何检测Qt工具提示内的鼠标点击?

Gio*_*gio 2 qt tooltip event-handling

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

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

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

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

编辑

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

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

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

Hos*_*ork 5

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

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

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

也就是说:在应该“hideTipImmediately”的事件中QEvent::mouseButtonPress......事实上,安装了一个事件过滤器,以便应用程序中的任何点击都会隐藏它:

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

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