Skip to main content

Command Palette

Search for a command to run...

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

Updated
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);

More from this blog

解决因OpenGL渲染窗口高宽比导致图形变形

在 OpenGL 中,由于窗口的 宽高比(aspect ratio) 与绘制内容的坐标系统不一致,图像会出现拉伸、压缩等变形现象。为了解决这个问题,可根据窗口的大小调整投影矩阵,确保图像在视觉上保持原始比例。 先通过glViewPort调整视口 void resizeGL(int w, int h) { glViewport(0, 0, w, h); } 再根据窗口高宽比,计算出合适的投影矩阵,这样体现出来的样式,就是截掉了宽高比之外的内容,显示的内容不变形,正圆就是正圆,不会被拉伸成...

Jun 18, 20251 min read

雷的部落格威力缩小版

29 posts

雷的部落格威力缩小版