在QWidget中跟踪鼠标光标

时间:2010-11-14 20:32:23

标签: c++ qt qt4

我正在使用mouseMoveEvent在简单的QT应用中跟踪鼠标光标的位置。我的问题是,我希望仅当光标位于400x400 mouseMoveEvent时才会触发QWidget。现在它无论鼠标在哪里都会发射。这是我的代码......

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

IPA2是我班级的名字。 ui是在设计师模式下创建的。

1 个答案:

答案 0 :(得分: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