2010-11-14 184 views
2

我正在使用mouseMoveEvent在簡單的QT應用程序中跟蹤鼠標光標的位置。我的問題是,我希望mouseMoveEvent僅在光標位於400x400 QWidget時觸發。現在它無論鼠標在哪裏都會觸發。這裏是我的代碼...在QWidget中跟蹤鼠標光標

void IPA2::mouseMoveEvent(QMouseEvent * event) { 
    cout << event->x() << endl; 
    cout << event->y() << endl; 
} 

IPA2是我的班的名字。 ui是在設計師模式下創建的...

+0

簡單地使用mapFromGlobal(事件 - > globalPos()),並將它與事件 - 比較> POS()值 – 2010-11-15 09:23:47

回答

2

如果我理解正確,那麼您可以在這裏執行檢查,如if (x,y in range) do_something

另一種方法是創建一個尺寸爲400x400的假部件並重新實現它的鼠標事件。

第三個(可能是矯枉過正)是使用事件過濾器(請參閱here)。

更新:

你不能只是 「容易」 處理使用Qt Designer中的鼠標事件。對於該方案,每個.ui方案几乎總是與相應的實現配對。這是你的處理應該完成的地方。

Qt Designer非常適合自動信號插槽處理,但mouseMoveEventevent,與插槽系統無關。

我會說我將如何實現這一點,你可以選擇(見前三種可能的方式)。

我會創建一些DummyWidget,這將有一個400x400尺寸和自定義虛擬mouseMoveEvent方法,它將實際上處理鼠標移動。

在我的主窗口的構造方法(也做了.ui-based建設)我會說,像

dummy_widget_ = new DummyWidget(...); 
// `dummy_widget_` is a private `DummyWidget*` member of the main window 

,然後可能會某處重新定位

就是這樣 - 現在當我的主窗口被創建時,會添加一個虛擬小部件,並且該小部件中的每個鼠標移動都會被處理(因爲我們提供了自定義實現)。

另一個的時刻,其與僅鼠標事件:http://doc.qt.nokia.com/4.7/qwidget.html#mouseTracking-prop

+0

在x,y是給出我雖然是全球職位。所以這些數字是不正確的。我希望從QWidget中引用位置。 – dfetter88 2010-11-14 20:38:16

+0

http://doc.qt.nokia.com/4.7/qmouseevent.html#pos – 2010-11-14 20:46:08

+0

還是給了我全球的地位。我認爲問題在於主窗口正在接收事件,但我不知道如何解決這個問題。 – dfetter88 2010-11-14 20:50:21