我需要一个特定小部件的“实时”工具提示。窗口小部件为某个线程活动提供了一个可视化界面(基本上告知了进度)。此活动发送常规消息,我希望这些消息可用作小部件的工具提示。使用widget->setToolTip(message);
实现这一点非常简单,但问题是当工具提示已经显示时,显示的消息不会动态更新。只有当鼠标在小部件上移动并且工具提示显示在不同的位置时,它才会刷新。我试图找到一些解决方案也与event()
和QEvent::ToolTip
但这似乎干扰其他正常小部件的工具提示没有'实时'工具提示消息,因为QToolTip::showText()
和QToolTip::hideText()
具有全球影响。任何想法如何破解这个?
好吧,像往常一样,我在SO上发布问题之后就找到了解决方案。方法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);
}