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

如何在Qt中检测工具提示内的鼠标单击?,qt,event-handling,tooltip,Qt,Event Handling,Tooltip,我有一个Qt应用程序,其中某些QLabel在某个内部条件发生时显示工具提示 由于工具提示有一个超时,并且Qt会自动隐藏,因此应用程序通过每3秒显示一次工具提示来保持工具提示的活动状态(我没有找到任何机制来告诉Qt无限期地显示工具提示) 工具提示将一直显示,直到用户单击QLabel本身:工具提示不再刷新并消失 我现在有一个新的要求,如果用户单击工具提示本身,工具提示也应该消失。当用户单击可见的工具提示时是否会发送信号?还是有必要使用更复杂的技术 编辑 我再次检查了我的代码,这里有一些额外的信息 Q

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

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

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

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

编辑

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

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

  • 删除工具提示超时:显示工具提示时,只要用户不单击它,它就会保持可见。如何在Qt中显示没有超时的工具提示
  • 反复显示工具提示,使其可见;检测鼠标单击工具提示以停止保持活动循环。当用户单击工具提示时,我如何接收信号

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

    接口中没有发布任何东西可以从QToolTip获取该类的实例,因此拦截点击只能通过某种不明智的黑客来完成

    这就是说:在应该“立即隐藏”的事件中,有
    QEvent::mouseButtonPress
    …事实上,安装了一个事件过滤器,以便应用程序中的任何单击都会隐藏它:


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

    注意QToolTip::showText的定义:

    void QToolTip::showText(常量QPoint和pos、常量QString和text、, QWidget*w,const QRect&rect)[static]将文本显示为工具提示, 以全球位置pos为关注点。工具提示 将显示从该点到平台的特定偏移 兴趣

    如果指定一个非空的rect,提示将在您完成后立即隐藏 将光标移出此区域

    rect位于用w指定的小部件的坐标中。如果 rect不是空的,您必须指定一个小部件。否则这个 参数可以是0,但用于确定适当的屏幕 关于多头系统

    如果文本为空,则隐藏工具提示。如果文本与 当前显示的工具提示,提示将不会移动。你可以强迫 首先用空文本隐藏提示,然后显示 新的尖端位于新的位置


    因此,您可以提供QToolTip将在其中显示的矩形。然后,如果您只想在用户单击QToolTip时关闭它,您可以捕获@HostileFork指出的mouseButtonPress事件,然后仅在事件坐标在其中时关闭工具提示。

    非常感谢!我将检查鼠标点击是否在应用程序的某个地方被过滤,以防止工具提示消失。