Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
6.2.0 Beta4, 6.2.1
-
None
-
Windows 10, MSVC 2019
-
-
8d6e825ddfa14f75959ae20a76e4e1a34f4faec2 (qt/qtbase/dev) bf4cf5a235ab6cdd454bb3b5169d12af5fb3725d (qt/qtbase/6.2)
Description
100% runtime crash when changing screen's scale factor or moving app between screens with different DPI, if app contains invisible child windows, e.g
import QtQuick import QtQuick.Window Window { width: 640 height: 480 visible: true Window { id: childWindow } }
Crash stack:
> qwindows.dll!QWindowsContext::windowsProc(HWND__ * hwnd, unsigned int message, QtWindows::WindowsEventType et, unsigned __int64 wParam, __int64 lParam, __int64 * result, QWindowsWindow * * platformWindowPtr) Line 1477 C++ qwindows.dll!qWindowsWndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 1702 C++ [External Code] Qt6Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 491 C++ Qt6Gui.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 73 C++ [Inline Frame] Qt6Core.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag>) Line 139 C++ Qt6Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 232 C++ Qt6Core.dll!QCoreApplication::exec() Line 1378 C++
Crashed in qtbase\src\plugins\platforms\windows\qwindowscontext.cpp, Line 1477
platformChildWindow is null here
// Scale child QPlatformWindow size. Windows sends WM_DPICHANGE to top-level windows only. for (QWindow *childWindow : platformWindow->window()->findChildren<QWindow *>()) { QWindowsWindow *platformChildWindow = static_cast<QWindowsWindow *>(childWindow->handle()); QRect currentGeometry = platformChildWindow->geometry(); <--- crashed QRect scaledGeometry = QRect(currentGeometry.topLeft() * scale, currentGeometry.size() * scale); platformChildWindow->setGeometry(scaledGeometry); }
Attachments
For Gerrit Dashboard: QTBUG-96466 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
374176,2 | windows qpa: Handle invisible child windows gracefully on dpi changes | dev | qt/qtbase | Status: MERGED | +2 | 0 |
374213,2 | windows qpa: Handle invisible child windows gracefully on dpi changes | 6.2 | qt/qtbase | Status: MERGED | +2 | 0 |
379076,2 | windows qpa: re-apply 8d6e825d | dev | qt/qtbase | Status: MERGED | +2 | 0 |
379132,2 | windows qpa: re-apply 8d6e825d | 6.2 | qt/qtbase | Status: MERGED | +2 | 0 |