[Interest] hi-res drawing on Windows

Jason H jhihn at gmx.com
Fri Feb 6 00:03:19 CET 2015


I don't know why that variable exists. It's useless as far as I can tell. Maybe it means that you are being scaled?

I use Screen.pixelDensity. Which varies as you think it should, but is spec'd in px per mm, not DPI.

That pixelRatio is either 1 or 0, I don't think it is ever in between. In theory on a 2x device the pixelDenisty will be 2x the 1x.
Meanwhile pixel ratio is:
old (10yr) monitor: 4.x
Samsung Note 2: 10.x
Moto X: 16.x



> Sent: Thursday, February 05, 2015 at 5:29 PM
> From: "John Weeks" <john at wavemetrics.com>
> To: "interest at qt-project.org" <interest at qt-project.org>
> Subject: [Interest] hi-res drawing on Windows
>
> Is there a comprehensive overview of drawing for monitors at various resolutions on Windows?
> 
> I am trying to get our application to work correctly on a hi-res monitor on Windows. In particular, I have a QToolButton-derived class that makes a button that is just the icon, with no visible frame. It overrides sizeHint(), maximumSize() and paintEvent() to do this. Instances of the button are given icons from PNG resources that have  both standard and "@2x" versions.
> 
> One point of this class is to size the button based on the size of the icon. Thus, sizeHint() and maximumSize() both return iconSize(). In the paintEvent(), I get the icon out of the button using icon(), get the QWindow for the window hosting the button and then use QIcon::pixmap(QWindow *, iconSize(), ...) to get the appropriate QPixmap to draw.
> 
> On Macintosh this works great. On my 5k iMac I get the correct size and hi-res pixmap. Slide the window over to my external standard-res monitor and it redraws with the standard res pixmap.
> 
> On Windows, I don't have a hi-res monitor. I'm faking it by setting "Change the size of all items" to Larger 150%. That's another way to say, "Make my large monitor small" :) Not ideal, and it's not 2x, so I don't really expect the 2x icons. What I DO expect is the QWindow::devicePixelRatio() might return 1.5, but all I get is 1.0 at all settings of "size of all items".
> 
> I found this:
> http://doc-snapshot.qt-project.org/qt5-5.4/highdpi.html
> 
> Since I'm on Windows 8.1 I should be in "Per-Monitor DPI Aware" mode. It seems like I shouldn't have to intervene in order to get resolution-independent pixel drawing.
> 
> If I do this before creating my QApplication instance:
> qputenv("QT_DEVICE_PIXEL_RATIO", "2")
> then I get 2.0 from devicePixelRatio(), as expected. I also get my hi-res icons.
> 
> If I do this instead:
> qputenv("QT_DEVICE_PIXEL_RATIO", "1.5")
> then devicePixelRatio returns 1.0, not 1.5.
> 
> And it doesn't seem like I should have to set this myself, anyway.
> 
> Thanks for any insight you might be able to offer!
> 
> -John Weeks
> 
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
> 



More information about the Interest mailing list