qt实现鼠标穿透,如果要被穿透窗口只有一层,也即没有嵌套窗口,直接只用对子窗口使用setAttribute
(Qt::WA_TransparentForMouseEvents,true);就ok,意味着鼠标事件让父窗口响应。
如果要穿透的窗口含有嵌套窗口,那么接着往下看
快速使用 /// #ifdef Q_OS_LINUX XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput, 0, 0, NULL, 0, ShapeSet, YXBanded); #endif #ifdef Q_OS_WIN SetWindowLong((HWND)winId(), GWL_EXSTYLE, GetWindowLong((HWND)winId(), GWL_EXSTYLE) | WS_EX_TRANSPARENT//忽略一切消息(WM_PAINT除外) | WS_EX_LAYERED); //层风格,有他才能支持半透明 #endif 以Linux下Qt中使用为例 /// //头文件 #include #include//函数调用
XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput,0,0, NULL, 0, ShapeSet, YXBanded);//.pro文件中添加
QT += x11extras LIBS += -lX11 -lXext
以Windows下Qt中使用为例
/// #include SetWindowLong((HWND)winId(), GWL_EXSTYLE, GetWindowLong((HWND)winId(), GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED);