需求描述:
當鼠標進入按鈕時,顯示菜單,當鼠標移出按鈕時,隱藏菜單
效果圖:

實現方式:
1. 創建自定義按鈕HelpButton,重寫enterEvent,mousePressEvent和mouseReleaseEvent方法
void HelpButton::enterEvent(QEvent * event)
{
showMenu();
}
光標進入按鈕后彈出菜單。
void HelpButton::mousePressEvent(QMouseEvent *event)
{
}
void HelpButton::mouseReleaseEvent(QMouseEvent *event)
{
}
將按鈕點擊事件設為空,避免點擊按鈕時重復彈出菜單
2.創建自定義菜單HelpMenu,重寫mouseMoveEvent,mousePressEvent和mouseReleaseEvent方法
void HelpMenu::mouseMoveEvent(QMouseEvent * event)
{
QPointF position = event->localPos();
double x = position.x();
double y = position.y();
if ((x < 0 || y < -22) || (x > 60 || y > 23))
{
setVisible(false);
}
}
這里獲取鼠標的位置,如果光標超出按鈕和菜單的范圍,就將菜單隱藏。
void HelpMenu::mousePressEvent(QMouseEvent * event)
{
}
void HelpMenu::mouseReleaseEvent(QMouseEvent * event)
{
QPointF position = event->localPos();
double x = position.x();
double y = position.y();
if (x > 0 && x < 60 && y < 23 && y>0)
{
setVisible(false);
emit onClick();
}
}
重寫菜單點擊事件,點擊后隱藏菜單
注意事項:
菜單彈出后,相當於在界面上創建了一個模態窗口,按鈕事件無法激活,所以重寫按鈕的leaveEvent是無效的
