我希望实现一个小部件(带有一些编辑框和滑块),当我将鼠标悬停在它上面时,它会在按钮(“开启者”)的下方或旁边打开。关键是它是一个临时的小部件 - 一旦它失去焦点,我希望它消失。此外,我希望它在Opener旁边弹出,理想情况下将箭头指向Opener。
所以,它基本上是一个工具提示。但它需要是一个带按钮和滑块的小部件,以及类似的东西。有没有一种聪明的方法来实现它,而无需为每个鼠标和焦点事件制作自定义小部件和编写处理程序,并在每次打开或开启者移动时重新计算其理想位置?
答案 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
。