Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 自扩展小部件,鼠标悬停_Qt - Fatal编程技术网

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逻辑