QT 关于嵌套窗口的键盘鼠标事件传递接收问题(鼠标穿透与键盘焦点代理)

鼠标穿透:

       默认情况下, 多层嵌套窗口各层全都会接收到鼠标事件(只要重写了鼠标事件函数),  而当加入以下函数调用后, 当前窗口将会透过鼠标点击事件(即该窗口对鼠标事件不再响应, 即使重写了鼠标事件函数)。注意参数第二项设为false时将恢复默认。

setAttribute(Qt::WA_TransparentForMouseEvents, true);

键盘焦点代理:

       默认情况下, 键盘事件仅对最顶层窗口有效, setFocusProxy()焦点代理函数可设置将当前窗口的焦点交由指定的下层窗口来代理,  即当前窗口获得键盘事件时,  会自动将事件传递到参数指向的窗口w,函数原型如下:

void QWidget::setFocusProxy(QWidget * w);

注意:仅仅设置了焦点代理, 其代理窗口默认情况下并不会响应键盘事件,  需要代理窗口调用setFocus()函数, 该函数设定其窗口可接收来自上层窗口的焦点代理请求。

w.setFocus();

       setFocus()还有一个带参数的重载函数, 可提供更复杂的关于焦点策略的设定。

void QWidget::setFocus(Qt::FocusReason reason);

 

你可能感兴趣的:(QT 关于嵌套窗口的键盘鼠标事件传递接收问题(鼠标穿透与键盘焦点代理))