qt – 自动扩展小部件,鼠标悬停

我希望实现一个小部件(带有一些编辑框和滑块),当我将其悬停时,它将在按钮(“开启者”)的下方或旁边打开.关键是它是一个临时的小部件 – 一旦它失去焦点,我希望它消失.此外,我希望它在Opener旁边弹出,理想情况下将箭头指向Opener.

所以,它基本上是一个工具提示.但它需要是一个带按钮和滑块的小部件,以及类似的东西.有没有一种聪明的方法来实现它,而无需为每个鼠标和焦点事件制作自定义小部件和编写处理程序,并在每次打开或开启者移动时重新计算其理想位置?

最佳答案

class OpenerButton : public QPushButton
{
public:
    OpenerButton(QWidget * parent = 0);
protected:
    void enterEvent(QEvent *e);
    void leaveEvent(QEvent *e);
};

OpenerButton::OpenerButton(QWidget * parent)
      : QPushButton(parent)
{
   //Do necessary initializations For ex:set a menu for opener button 
}

void OpenerButton::leaveEvent(QEvent * e)
{
          //hide the popup_menu
}

void OpenerButton::enterEvent(QEvent * e)
{
    //Show the menu
    //You can use animation for ex:
     Popup_menu=new Popup_Dialog(this);//Popup_Dialog is a dialog containing all your widgets
     QPropertyAnimation *animation = new QPropertyAnimation(Popup_menu,"geometry");
     animation->setDuration(500);
     animation->setDirection(QAbstractAnimation::Forward);
     QRect startRect(Rect_Relative_to_Opener_Button);
     QRect endRect(Shifted_Rect_Relative_to_Opener_Button);
     animation->setStartValue(startRect);
     animation->setEndValue(endRect);
     animation->start();

}

当鼠标光标进入窗口小部件时调用Enterevent.类似地,当鼠标光标离开小部件时发生事件.

点赞