【发布时间】:2014-02-03 13:30:13
【问题描述】:
有一个非常自定义的 QWidget “A”,我没有代码,我只能接收它的 QWidget* 指针。而且我必须在“A”收到任何事件(某种事件过滤器)之前接收所有“A”的事件并处理它们。
现在我已经尝试在它上面放置另一个非常简单的 QWidget“B”,但我无法让这个“B”完全透明(我需要保持“A”全部可见)。
下一个想法是在“A”之上放置一个QLayout“C”,但是这个布局没有接收到足够的事件(实际上:我把一个qDebug()语句放到了“C”::event(QEvent *evt),它根本没有被执行——所以布局从来没有收到任何事件)。
有什么方法可以在“A”之前获取“A”的事件,以便我可以对它们进行预处理,可能会确认一些事件并将其他事件推到“A”?
P.S.:"A" 进行 OpenGL 绘画,但它不是从 QGLWidget 派生的。我放在上面的任何小部件都覆盖了所有“A”,设置“WA_PointOnScreen”或“WA_TranslucentBackground”等属性没有产生任何可用的结果。
P.P.S.:使用 QLayout(如 QGridLayout)的想法很好,因为我需要在“A”顶部放置一些小部件,它们也可能会遮挡“A”(但可以根据需要隐藏它们)。
编辑:我刚刚尝试了"C"->installEventFilter("A") 并实现了
bool "C"::eventFilter(QObject* QEvent*) - 无济于事 - eventFilter 永远不会执行...
编辑:因为我只是不想放弃,所以我再次尝试了 QWidget 方法。我找到了 WidgetAttribute WA_DontShowOnScreen,这有点帮助:
- 我收到各种鼠标事件
- 我收到了大多数窗口系统事件(至少有绘制和调整大小)
- 我错过了任何键盘事件 - 这并不奇怪,因为不可见的小部件通常与键盘无关...
- 我错过了进入/离开事件 - 也不是很奇怪,但是为什么我会收到鼠标事件呢?
【问题讨论】: