Qt,如何在不悬停控件的情况下使工具提示可见?

5

当容器小部件获得焦点/可见时,我希望工具提示默认可见。

我希望工具提示出现在相应控件上无需鼠标悬停。

1个回答

6
你需要创建一个小部件的子类并覆盖事件处理程序,这些事件应该会产生工具提示显示。在处理程序中,创建一个类型为QEvent::ToolTipQHelpEvent,并将其排队到事件循环中。最后调用父级的原始处理程序,让它执行原来预期的操作。
因此,针对获取按钮焦点,具体的做法是:
class MyButton : public QPushButton {
  virtual void focusInEvent(QFocusEvent *) {
    if(evt->gotFocus()) {
      QPoint pos(0,0);
      QHelpEvent* help = new QHelpEvent(
        QEvent::ToolTip,pos,this->mapToGlobal(pos));
      QCoreApplication::postEvent(this,help);
    }
    QPushButton::focusInEvent(evt);
  }
}

为了提高可见性,您需要覆盖原有设置

void QWidget::showEvent(QShowEvent * event);

并且执行类似的代码。你需要根据自己的喜好调整相对位置pos,因为原来的工具提示依赖于鼠标位置,而这里没有鼠标位置。同时要非常严格地控制使您的小部件聚焦和/或可见。默认情况下,某些东西一直处于焦点状态,因此您将在各个地方获得工具提示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接