需求描述:
當鼠標進入按鈕時,顯示菜單,當鼠標移出按鈕時,隱藏菜單
效果圖:
實現方式:
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是無效的