【发布时间】:2011-11-16 20:58:33
【问题描述】:
我在使用 Qt 时遇到以下问题(本网站上没有答案似乎完全解决了这个问题,所以我创建了自己的问题)。
我有一个继承自 QWidget 的 MainWindow 类的应用程序。在某个时刻,主窗口内有一个表格,我想捕获所有鼠标按下的事件在该表格之外。
我的第一个解决方案是重新实现该方法
/* virtual */ void MainWindow::mousePressEvent(QMouseEvent *event)
在这个方法中,我检查事件的位置,并检查它是否不在表格的 QRect 内。不幸的是,我意识到并不总是调用 mousePressEvent()。我怀疑如果我单击 MainWindow 的另一个子小部件,该小部件会消耗该事件并且不会将其传递给父级。
所以我唯一的替代想法是重新实现 mousePressEvent() 方法为所有 MainWindow 中包含的小部件。这当然不可行,因为:
- 其中有很多:如果必须更改在 MainWindow 中实例化的所有小部件类,这将非常复杂、耗时、容易出错且难以维护。
- 一些子小部件是在并行项目中开发的一些库模块中实现的,所以我无法更改这些。
- 在其他情况下,子小部件直接使用 Qt 类。
- 即使我为 2 和 3 定义了自定义子类,我也必须确保在任何地方都使用这些子类而不是原始类。这可能意味着再次回到案例 2。
所以这个替代解决方案对我来说似乎不可行。
总结:您知道是否有一种简单的方法可以从 MainWindow 类中捕获主窗口上的所有鼠标点击?
【问题讨论】: