鼠标悬停在自我扩展的小工具上

时间:2012-06-03 22:13:02

标签: qt

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

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

1 个答案:

答案 0 :(得分:2)

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。类似地,当鼠标光标离开小部件时leaveevent