Qt,如何在不悬停在控件上方的情况下使Tooltip可见?

时间:2012-09-11 09:49:40

标签: qt focus hover tooltip visible

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

我希望工具提示无需鼠标悬停在相应的控件上即可显示。

1 个答案:

答案 0 :(得分:3)

您需要为小部件创建子类并覆盖应生成工具提示显示的事件的处理程序。在处理程序中,创建QHelpEvent类型QEvent::ToolTip并在事件循环中将其排入队列。最后调用父进程的原始处理程序,让它执行最初的目的。

所以专门用于关注按钮,它将是

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,因为最初的工具提示取决于您在此处没有的鼠标位置。同时保持对小部件集中和/或可见的小部件的严密控制。默认情况下,某些内容会一直处于焦点,因此您将获得所有工具提示。