解决QWidget用winId获取HWND而导致Qt程序无事件消息的问题

源赖朝源赖朝
1 min read

问题原因:

当对一个QWidget调用winId时,默认情况下,Qt会对该窗口进行Native化,从而导致如鼠标等事件被其它原生窗口接管,表现出来的现像就是窗口不响应任何事件

解决思路:

防止Qt窗口Native化

解决办法:

第一步,在创建QApplication对象之前设置:

QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
//注意:Qt::AA_NativeWindows受环境变量 QT_USE_NATIVE_WINDOWS控制,
//有可能环境变量被别的软件修改,所以也需要设置下
QApplication::setAttribute(Qt::AA_NativeWindows,false);

第二步,在调用winId之前对该QWidget设置:

this->setAttribute(Qt::WA_DontCreateNativeAncestors);
0
Subscribe to my newsletter

Read articles from 源赖朝 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

源赖朝
源赖朝