我正在使用mouseMoveEvent
在简单的QT应用中跟踪鼠标光标的位置。我的问题是,我希望仅当光标位于400x400 mouseMoveEvent
时才会触发QWidget
。现在它无论鼠标在哪里都会发射。这是我的代码......
void IPA2::mouseMoveEvent(QMouseEvent * event) {
cout << event->x() << endl;
cout << event->y() << endl;
}
IPA2
是我班级的名字。 ui是在设计师模式下创建的。
答案 0 :(得分:2)
如果我理解正确,您可以在此处执行支票,例如if (x,y in range) do_something
。
另一种方法是创建一个400x400尺寸的假小部件并重新实现它的鼠标事件。
第三种(可能是矫枉过正)是使用事件过滤器(见here)。
<强>更新强>
您不能只使用Qt Designer“轻松”处理鼠标事件。每个.ui
方案几乎总是与该方案的相应实现配对。这是您应该处理的地方。
Qt Designer非常适合自动信号槽处理,但mouseMoveEvent
是event
并且与插槽系统无关。
我想说如何实现这一点,你可以选择(参见之前的三种可能方式)。
我会创建一些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