Details
-
Bug
-
Resolution: Cannot Reproduce
-
P2: Important
-
5.12.3, 5.15.6
Description
Given a Windows system with two monitors, the second one right of the first, scaling set to something > 100%. Given a QML app with corresponding QT_SCALE_FACTOR set and a Window which is positioned at x: 400; y: 400.
If the app is started on screen 1, the positioning is correct.
If the app is started on screen 2, the window is somewhere else than it should be.
This may be related to mixing scaled values with non-scaled values when calculating position. If I dump the contents of Qt.application.screens, I get the following on my system:
qml: 0 : name: \\.\DISPLAY1 qml: 0 : width: 2406 qml: 0 : height: 1354 qml: 0 : devicePixelRatio: 1.25 qml: 0 : virtualX: 0 qml: 0 : virtualY: 0 qml: 0 : desktopAvailableWidth: 5312 qml: 0 : desktopAvailableHeight: 1440 qml: 1 : name: \\.\DISPLAY2 qml: 1 : width: 2304 qml: 1 : height: 1440 qml: 1 : devicePixelRatio: 1.25 qml: 1 : virtualX: 3008 qml: 1 : virtualY: 0 qml: 1 : desktopAvailableWidth: 5312 qml: 1 : desktopAvailableHeight: 1440
virtualX is an unscaled value whereas width is scaled. desktopAvailableWidth seems to be sum of screen 2's virtualX and screen 1's width, so it is the sum of a scaled and an unscaled value. I don't know if this is related is any way, though.
However, given the above values, the window at x: 400; y: 400 is actually at x: -202; y: 400 if started on the second screen.
-202 happens to be x - Qt.application.screen[1].virtualX + Qt.application.screen[0].width. If screen 2's virtualX was equal to screen 1's width – as you would expect – this formula would equal to x thus 400. (Although the point of calculating it in the first place still eludes me.)
I have attached my example app.
(I have no idea whether the component I selected is correct.)