Qt界面縮放由內部類QHighDpiScaling控制,應用程序可以通過設置全局變量影響Qt的整體縮放係數。
Qt中影響縮放係數的全局宏變量有:
QT_DEVICE_PIXEL_RATIO //不推薦使用,沒有設置QT_SCALE_FACTOR時生效。
QT_SCALE_FACTOR //全局縮放係數,多個屏幕用統一的縮放係數
qputenv("QT_SCALE_FACTOR", "2");
QT_SCREEN_SCALE_FACTORS //設置多個屏幕的縮放係數,該參數的值採用分號";"組合的鍵值對錶示,其中名字對應
QGuiApplication::screens()中獲取的QScreen::name()值,如下爲測試時兩臺顯示器的名稱。
qputenv("QT_SCREEN_SCALE_FACTORS", "\\\\.\\DISPLAY1=1;\\\\.\\DISPLAY2=2");
QT_AUTO_SCREEN_SCALE_FACTOR //縮放係數由系統(Platform)根據DPI計算,值爲0或者非0值,表示開啓或關閉DPI自適應,若同時設置QT_SCALE_FACTOR,最終的縮放係數爲二者乘積。
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
在Windows平臺,若需要根據分辨率設置不同的界面大小,可以採用以下方式
double dScaleFactor = 1.0;
SetProcessDPIAware();
int nWidth = GetSystemMetrics(SM_CXSCREEN);
if(nWidth >= 3840)
{
dScaleFactor = 2.0;
}
qputenv("QT_SCALE_FACTOR", QString::number(dScaleFactor).toUtf8());