Solved How can I make my app ignore window's "HIGH DPI SCALING"?
-
Greetings,
My app's UI goes crazy when I move it to a screen that has a high DPI scaling enabled(150%) instead of (100%).
This is probably a sign of a bad widget design, but that's a problem for another day. For now, I just want my app to ignore the HIGH DPI SCALING option in windows if it's possible.
I looked at this answer but I've put AA_DisableHighDpiScaling instead of AA_EnableHighDpiScaling in my main.cpp:
QApplication a(argc, argv); QApplication::setAttribute(Qt::AA_DisableHighDpiScaling); // Disable DPI support
But it has no effect. When I set the scaling to be 100% on the other screen everything is fine.
I would appreciate it if someone knows how to make my app ignore said scaling.
Thank You!
-
@Curtwagner1984 reading through the documentation of
AA_DisableHighDpiScaling
Disables high-DPI scaling in Qt, exposing window system coordinates. Note that the window system may do its own scaling, so this does not guarantee that QPaintDevice::devicePixelRatio() will be equal to 1. In addition, scale factors set by QT_SCALE_FACTOR will not be affected. This corresponds to setting the QT_AUTO_SCREEN_SCALE_FACTOR environment variable to 0. This attribute must be set before QGuiApplication is constructed. This value was added in Qt 5.6.
it clearly states, that attribute has to be set before the creation of the QApplication, you seem to do it afterwards.
-
Thank you! For some reason I assumed this needs to be done after.
It's like this now:
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling); // Disable DPI support QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec();
But it doesn't really seem to have an effect.
This is how it looks on a display with 100% scaling and this is how it looks on a display with 150% scaling
-
@Curtwagner1984 said in How can I make my app ignore window's "HIGH DPI SCALING"?:
it doesn't really seem to have an effect.
Try running your app in "DPI Unaware" mode: https://doc.qt.io/qt-5/highdpi.html#migrate-existing-applications
-
Thanks,
I made a file named qt.conf with the line<application> -platform windows:dpiawareness=0
And put it in the the folder of the executable. Nothing changed.
Is this correct? Should
application
be the name of the application? -
@Curtwagner1984 said in How can I make my app ignore window's "HIGH DPI SCALING"?:
I made a file named qt.conf with the line
<application> -platform windows:dpiawareness=0
Those are command line arguments. You pass the extra arguments while launching your .exe from the Command Prompt .
-
Thank you! This works!
Is there a way to set it up in the application itself, without the need to provide extra command line arguments? -
@Curtwagner1984
good old putenv, probably -
@J-Hilk
I looked at this. What environment variable name (and value) are you proposing for-platform windows:dpiawareness=0
, I could not see that it worked this way?? -
@JonB admittedly
the official way to do it, is apparently the creation and deployment of aqt.conf
file, same level as the executable with this content:[Platforms]
WindowsArguments = dpiawareness=0that said:
qputenv("dpiawareness", "0"); or qputenv("windows:dpiawareness", "0");
I'm unsure, I'm not using it often enough :D
-
@J-Hilk said in How can I make my app ignore window's "HIGH DPI SCALING"?:
qputenv("dpiawareness", "0"); or qputenv("windows:dpiawareness", "0");
I'm unsure, I'm not using it often enough :DThere is/I can see no evidence that a Qt program would recognise either of these proposed environment variable names. Unless you can see where it says it does.... I see only the command line or
qt.conf
file approaches so far. -
@J-Hilk said in How can I make my app ignore window's "HIGH DPI SCALING"?:
[Platforms]
WindowsArguments = dpiawareness=0Thank you! I tried to used this before but I've put incorrect syntax in this file. This works.