天天看點

關于Qt高分屏縮放幾個知識點

  • 在windows上經常遇到高分屏縮放的問題,很頭疼,貌似這東西就是windows首發的。
  • 在Qt4時代的程式遇到高分屏縮放,不作任何處理,畢竟Qt4時代(2010年以前)出來的時候幾乎還沒高分屏縮放這東西。
  • 從Qt5.6開始提供了高分屏縮放支援,需要在main函數前面設定 QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  • 從Qt5.14開始提供了高分屏縮放政策設定,需要在main函數前面設定 QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
  • 從Qt6.0開始預設就開啟高分屏屬性Qt::AA_EnableHighDpiScaling,而且不允許關閉(是以你會發現程式用Qt6編譯後界面變得很大)。可以通過setHighDpiScaleFactorRoundingPolicy函數設定政策。
  • 如果不想要高分屏,希望程式永遠保持預設的尺寸,你需要在main函數前面設定 QApplication::setAttribute(Qt::AA_Use96Dpi); 表示永遠不縮放。
  • 如果希望啟用Qt的高分屏則需要設定Qt::AA_EnableHighDpiScaling和setHighDpiScaleFactorRoundingPolicy。缺點是圖檔容易發虛,比如複選框的邊框,哪怕是Qt内置樣式風格或者系統預設風格也一樣。
int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
    QApplication a(argc, argv);
}      
  • 另外一種辦法就是寫個文本檔案qt.conf(Qt程式預設的标準配置檔案,必須是這個名字),寫入内容後,放到可執行檔案同一目錄即可,此方法采用作業系統的政策進行縮放,推薦此方法,雖然看起來稍微有點模糊,但不會出現發虛等問題,整體一緻。
[Platforms]
WindowsArguments = dpiawareness=0      
  • 沒有完美的高分屏支援方法,都是隻能盡量滿足,哪怕是windows系統本身,在開啟縮放的時候,任務管理器也是模糊的很(盡管改成124%可以改變,但總歸不是好辦法),還有很多其他知名軟體也是如此。
  • 參考文章​​javascript:void(0)​​
關于Qt高分屏縮放幾個知識點
關于Qt高分屏縮放幾個知識點