Hey guys,
From the screenshots, it definitely looks like Qt6 is trying to draw the fonts at 96dpi, when they should be 120dpi.
Interesting - so it looks like the dpi setting is also used to scale fonts, as well as screen resolution. I'll dig into this some more - I still think this is a step forward - I'd rather small fonts/menus in the correct location, than larger fonts that are offset in position 
Cheers,
Paul.
Edit: https://forum.qt.io/topic/125521/how-to-understand-logical-dpi-and-physical-dpi-in-qscreen/4 probably explains what's happening....
It sounds like you've figured out the conversion for window scaling, it's just font scaling that's off.
This stuff can be a bit hard to keep straight, even for someone like me who's studied it at length... I'll include some background info here because it makes it easier for me to articulate things. It doesn't mean I assume you don't know much of this already.
A font's point size is a fixed unit of measure where 1 pt == 1/72 of an inch. So when a font is 12pt, that means its "em height" (a measure which means the bounding height of unaccented characters) is 12 points (or 1/8 inch) high.
On a computers, we measure things in pixels instead of inches. So font scaling is all about figuring out the conversion factor of points to pixels. To do this, we use the DPI resolution of the output device (the screen or printer).
OS/2 Presentation Manager supports two DPI settings: 96 (which is the default at 800x600 and below), and 120 (which is the default at 1024x768 and up).
So when a font is rendered on screen, its em height is scaled down to a number of pixels equal to pts * (DPI / 72). For example, a 12-point font on a 120 DPI screen would be drawn at 12 * 1.666666 == 20 pixels high.
Conversely, if you have a specific pixel height and you want to know the correct point size that will fit it, you flip the equation: points = pixels / (DPI / 72). So to render an unaccented character (without padding) in a 30-pixel high box at 120 DPI, you need 30 / 1.666666 == 18pt. (To allow space for accents and line spacing, you'd normally pad this a bit, probably by querying some of the font-specific metrics like lMaxAscender.)
Things get a bit more complicated because some programs like the Mozilla apps (and probably also Qt), define their own DPI setting separately from what PM thinks it should be.
I assume you need to adjust Qt's DPI to match the current PM value, or else apply a conversion factor between the two. (I'm not sure how Qt represents this internally. The documentation I found is not very informative.)
You can query the current PM DPI setting using DevQueryCaps.
HDC hdc
LONG lCap, lDPI = 0;
hdc = WinOpenWindowDC( hwnd )
if ( DevQueryCaps( hdc, CAPS_VERTICAL_FONT_RES, 1, &lCap ))
lDPI = lCap;
if ( !lDPI )
lDPI = 120;