[問題] Qt 抓滑鼠座標

看板C_and_CPP (C/C++)作者 (卯)時間13年前 (2012/10/13 12:13), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/1
目前我寫用Qt寫一個可以抓滑鼠座標的程式 而可以抓到的座標卻侷限在Widget or MainWindow裡面 只要跑到外面就沒辦法更新了,抓座標的方式是這樣寫得 void Widget::mouseMoveEvent(QMouseEvent *e) { int x_cod = e->globalX(); int y_cod = e->globalY(); ..... ..... } 在上段的程式碼雖然用了globalX,可是一旦滑鼠移出Widget,就不再更新了 而我查到一段作法是使用grabMouse的方式 寫法如下: void Widget::mouseMoveEvent(QMouseEvent *e) { grabMouse(); int x_cod = e->globalX(); int y_cod = e->globalY(); ...... ...... } void Widget::mousePressEvent(QMouseEvent *e) { releaseMouse(); } void Widget::mouseReleaseEvent(QMouseEvent *e) { releaseMouse(); } 上面的作法是說再產生滑鼠移動的event時,就抓住滑鼠所有控制權 在"滑鼠按下"及"滑鼠放開"的兩個event下,把滑鼠release 可是這樣的作法非常吃CPU,會造成UI畫面更新過慢 因此想請教各位先進該怎麼做才不會干擾到UI的更新速度 還望先進指點,謝謝 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 小弟找到關於我問題的解法,以下分享給大家 Widget or Window具有兩個event:leaveEvent、enterEvent 在leaveEvent的時候做grabMouse,在enterEvent的時候做releaseMouse就行了 程式大致如下: void Widget::leaveEvent(QEvent *e) { grabMouse(); } void Widget::enterEvent(QEvent *e) { releaseMouse(); } 不過這樣的作法變成一旦開啟這隻程式,除了關掉該程式外 滑鼠皆不可對其他Window產生動作,不過這也是我的需求沒錯 -- 當你睜大眼睛卻發現自己什麼都看不見的時候,不要以為是自己瞎了 或許,前方真的一無所有 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.136.144

10/13 13:00, , 1F
妳可以用 timer 去更新滑鼠位置的資訊。
10/13 13:00, 1F

10/13 13:02, , 2F
在 timer event 發生時用 QCursor::pos() 取得滑鼠位置。
10/13 13:02, 2F

10/13 13:16, , 3F
l大的想法應該可以行得通
10/13 13:16, 3F

10/13 13:16, , 4F
只是這樣的話,mouseMoveEvent好像就無用化了...
10/13 13:16, 4F

10/13 13:32, , 5F
如果你在納悶為什麼會慢,或許你可以試試看不要重複 grab
10/13 13:32, 5F

10/13 14:39, , 6F
小弟已經找到另一個符合我需求的解法了,謝謝l大
10/13 14:39, 6F
※ 編輯: godman362 來自: 123.195.136.144 (10/13 14:41) ※ 編輯: godman362 來自: 123.195.136.144 (10/13 14:43)
文章代碼(AID): #1GUEfV3i (C_and_CPP)
文章代碼(AID): #1GUEfV3i (C_and_CPP)