Skip to main content

Command Palette

Search for a command to run...

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

Published
•1 min read•View as Markdown

问题原因:

当对一个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);

More from this blog

雷

雷的部落格威力缩小版

30 posts

雷的部落格威力缩小版