Qt實現按鈕菜單自動顯隱的效果


需求描述:

  當鼠標進入按鈕時,顯示菜單,當鼠標移出按鈕時,隱藏菜單

效果圖:

  

實現方式:

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是無效的

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM