我有一个Qt应用程序,如果发生某种内部情况,某些QLabel会显示工具提示。
由于工具提示有超时并且被Qt自动隐藏,应用程序通过每3秒显示一次工具提示来保持工具提示活着(我没有找到任何机制告诉Qt无限期地显示工具提示)。
显示工具提示,直到用户点击QLabel本身:工具提示不再刷新并消失。
我现在有一个新要求,即如果用户点击工具提示本身,工具提示也应该消失。当用户点击可见的工具提示时是否有信号?或者是否有必要使用更复杂的技术?
修改
我再次检查了我的代码,这里有一些额外的信息。
Qt确实检测到工具提示上的鼠标点击并将其隐藏,但应用程序会立即再次显示工具提示。 我想要做的是Qt通知我的代码鼠标点击事件,以便它一次又一次地停止显示工具提示。我有两个可能的解决方案,但我不知道其中任何一个在技术上是否可行:
答案 0 :(得分:3)
在幕后,实现工具提示的实际类是一个名为QTipLabel的私有QLabel派生类:
http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/kernel/qtooltip.cpp#line119
在界面中没有任何内容可以从QToolTip获取该类的实例,因此拦截点击只会通过某种不明智的黑客来完成。
那说:应该“hideTipImmediately”的事件中QEvent::mouseButtonPress
...实际上,安装了一个事件过滤器,以便应用程序中的任何点击将隐藏它:< / p>
http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/kernel/qtooltip.cpp#line325
因此,如果您没有看到工具提示在被点击时消失,则会出现错误。 (点击工具提示会在Kubuntu下的基于Qt的应用程序中隐藏它们。)
答案 1 :(得分:1)
注意QToolTip :: showText:
的定义void QToolTip :: showText(const QPoint&amp; pos,const QString&amp; text, QWidget * w,const QRect&amp; rect)[静态]将文本显示为工具提示, 以全球排名pos作为兴趣点。工具提示 将从这一点以平台特定偏移显示 兴趣。
如果您指定非空的矩形,则您的提示将立即隐藏 将光标移出此区域。
rect位于您使用w指定的窗口小部件的坐标中。如果 如果rect不是空的,则必须指定一个小部件。否则这个 参数可以为0但它用于确定适当的屏幕 在多头系统上。
如果文字为空,则隐藏工具提示。如果文字是相同的 当前显示的工具提示,提示不会移动。你可以强迫 首先用空文本隐藏提示,然后显示 新职位的新提示。
因此,您可以提供要在其中呈现QToolTip的矩形。然后,如果您想要做的只是在用户点击 it 时关闭QToolTip,您可以捕获mouseHuttilePress指出的mouseButtonPress事件,然后仅在事件坐标下降时关闭工具提示在其中。