我需要一个特定小部件的'Live'工具提示。小部件为某个螺纹活动提供了一个视觉接口(基本上是为了进度的信息)。此活动会发送常规消息,我希望这些消息可作为Widget的工具提示。widget->setToolTip(message);
实现这一点非常简单,但问题是,当已经显示了工具提示时,显示的消息不会动态更新。仅当鼠标移动在小部件上时才刷新,并且在其他位置显示工具尖端。我尝试使用event()
和QEvent::ToolTip
也找到一些解决方案,但这似乎干扰了其他普通小部件的工具提示,而没有"实时"工具提示,因为QToolTip::showText()
和QToolTip::hideText()
具有全球影响。有什么想法如何破解?
好吧,像往常一样,在发布问题之后,我就找到了解决方案。方法updateToolTip
检查是否显示了工具提示,并且只有当鼠标光标在相关的小部件上方(基于它没有需要工具提示的子小部件的假设)时,文本已更新为"实时"。
void TaskWidget::updateToolTip(const QString &message)
{
setToolTip(message);
if (!QToolTip::isVisible())
return;
QPoint p = mapFromGlobal(QCursor::pos());
if (p.x() >= 0 && p.y() >= 0 && p.x() < width() && p.y() < height())
QToolTip::showText(QCursor::pos(), message);
}