2010-11-14 213 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