【发布时间】:2014-03-04 02:44:41
【问题描述】:
我有一个 QML 应用程序(也使用 QWidgets 对其进行了测试,同样的问题)并使其无边界(但仍支持原生 WM 功能,如 aero snap 等)我遵循 this 通过实现 QAbstractNativeEventFilter 并响应WM_NCCALSIZE 信号为零:
switch(msg->message) {
case WM_NCCALCSIZE:
*r = 0;
return 1;
...
}
我还设置了一些不在 Qt 命名空间中的窗口标志
SetWindowLong(hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);
这工作正常,直到我移动或调整导致 Qt 重新呈现的窗口的大小和未绘制的区域宽度,标题的宽度和边框出现:
在移动/调整大小之前
移动/调整大小后
我还通过在 Qt 中添加 FramelessWindowHint 标志找到了解决方法:
window->setFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::Dialog);
但是现在,当窗口状态发生变化(最大化、最小化……)时,这个边距会再次出现。通过阻止 WM_SIZE 事件,例如当 SIZE_MAXIMIZED 是参数时,边距不会出现,但是我也无法从 Qt 最大化窗口。这意味着这是 Qt 的一个问题。
我还注意到通过使用 winspector 检查窗口样式,在我将其最大化后会出现一个新的属性原子:
你能帮我解决这个问题吗?
【问题讨论】:
-
对不起,这是Qt 5.2版