一仰美,前言
今天要刻意練習(xí)的是鼠標右鍵菜單。比如別人工具上某個地方右鍵則有不同的菜單彈出蔚晨。若右鍵點擊在table上也會讀取些信息乍钻。
二,需求
實現(xiàn)鼠標右鍵功能铭腕。
三银择,遇到的問題
1. 如何讓菜單在鼠標右擊的時候顯示
答:網(wǎng)上查了好幾個方法,我用的方法是設(shè)置contextMenuPolicy為Qt::DefaultContextMenu累舷,這個也是默認值浩考。然后重寫QWidget類的contextMenuEvent事件。
其它方法包括:
a.實現(xiàn)customContextMenuRequested信號的接口被盈,并調(diào)用setContextMenuPolicy設(shè)置Qt::CustomContextMenu參數(shù)析孽,使用connect鏈接。
b.重寫父類的mousePressEvent函數(shù)害捕,處理鼠標右鍵事件绿淋。
2.如何讓menu在鼠標位置顯示?
答:pMenuRight->exec(QCursor::pos())
尝盼。編輯界面點擊exec選F1后可以看到幫助吞滞,關(guān)于鼠標傳遞還有2種方式矫夯。
3. 如何判斷鼠標位置是否包含某控件品洛?
答:方法是if(xxx->geometry().contains(this->mapFromGlobal(QCursor::pos())))
,當(dāng)然控件太多的話這樣的方法就不適用了谨朝「熬或者將控件保存到控件list佩捞,通過掃描list來排除。
四蕾哟,效果
就在之前的界面上再加一個右功能一忱,但是我做完覺得有點不好,就是連按鈕位置都可以有右鍵功能谭确×庇控件過濾沒有添加哦,將來有需要再加逐哈,反正解決方案已知芬迄。
五,小結(jié)
通過自己挖掘需求來進行刻意練習(xí)昂秃,我已經(jīng)掌握了不少的技能了禀梳,好有成就感呢杜窄!我喜歡這樣白手起家從頭開始干的感覺~