Qt 自扩展小部件,鼠标悬停
我想实现一个小部件(带有一些编辑框和滑块),当我悬停在按钮(“打开器”)下方或旁边时,它会打开。关键是它是一个临时小部件-一旦失去焦点,我希望它消失。另外,我希望它能在开瓶器旁边弹出,理想情况下是指向开瓶器的箭头 所以,它基本上是一个工具提示。但它需要一个有按钮、滑块之类的小部件。有没有一种聪明的方法来实现它,而不必制作一个自定义小部件,为所有鼠标和焦点事件编写处理程序,并在每次打开它或打开器移动时重新计算它的理想位置Qt 自扩展小部件,鼠标悬停,qt,Qt,我想实现一个小部件(带有一些编辑框和滑块),当我悬停在按钮(“打开器”)下方或旁边时,它会打开。关键是它是一个临时小部件-一旦失去焦点,我希望它消失。另外,我希望它能在开瓶器旁边弹出,理想情况下是指向开瓶器的箭头 所以,它基本上是一个工具提示。但它需要一个有按钮、滑块之类的小部件。有没有一种聪明的方法来实现它,而不必制作一个自定义小部件,为所有鼠标和焦点事件编写处理程序,并在每次打开它或打开器移动时重新计算它的理想位置 class OpenerButton : public QPushButto
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
。感谢您指出属性动画功能-我不知道!不幸的是,这并不能真正解决问题。将弹出对话框设置为按钮的子项将剪辑对话框。我想你的意思是离开/进入是相反的?enterEvent可以打开对话框,但是如果我让leaveEvent()关闭它,那么用户就永远没有机会将鼠标移到“打开器”按钮之外的弹出对话框小部件中。如果对话框focusOutEvent()将其隐藏,则在对话框控件中聚焦会导致其自身隐藏。甚至在任何类似工具提示的行为之前。。。也许这是无法解决的。好吧,那么在leaveEvent中什么都不做。你也可以在不为button做父母的情况下完成这项任务。通过为弹出菜单开发自定义对话框并实现其leaveevent和enterevent…:)来执行相同的enterevent leaveevent逻辑