Qt4K高分屏自適應,解決字體沒有跟隨組件增大的問題


解決背景

在一次做項目的過程中,公司讓我做高分屏適配,就是讓我們所開發的軟件支持4K屏的顯示,我在百度上開始搜索資料,有很多博客給出的答案就是:

#if(QT_VERSION >= QT_VERSION_CHECK(5,6,0))
        QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
        QApplication a(argc, argv);

 
 

解決過程

我也這樣做了,結果,沒錯,Qt確實是把窗口以及組件的大小進行了屏幕自適應,但是組件內的字體大小卻沒有改變,所以顯示出來的結果就是這個樣子,如圖:

 

解決方法

看上去是不是很不協調,很丑有沒有,但是沒辦法,你如果非得讓我給你解釋原理的話,就是:原因是qt的dpi計算錯誤,這樣的情況會導致qt在不同的平台上大小不一,解決的方法就是設置好qt的dpi,qt是根據顯示器的物理長度或者寬度於分辨率的關系來計算dpi的, 所以,咱們把Qt字體的PointSize重新設置,一次,就能解決這個問題。廢話不說直接上代碼:

#if(QT_VERSION >= QT_VERSION_CHECK(5,6,0))
        QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
        QApplication a(argc, argv);
        
        QFont font = a.font();
        font.setPointSize(10);//這個值根據自身情況自行調節,如果字體沒變化,把setPointSize()內的值繼續增大
        a.setFont(font); 

當你把setPointSize()內的值設置大了之后,你會發現,顯示竟然正常了,如圖:

 
 

最終代碼

現在的話,字體大小就已經正常了,但是如果在1080P上面字體可能會更大,因為你現在是在4K屏,所以看上去是正常的,那咱們接下來應該怎么做,很簡單,讓setPointSize()的值根據系統自行調節,問題就解決了,廢話不說,繼續上代碼:

#if(QT_VERSION >= QT_VERSION_CHECK(5,6,0))
        QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
        QApplication a(argc, argv);
        
        const float DEFAULT_DPI = 96.0;
        HDC screen = GetDC(NULL);
        FLOAT dpiX = static_cast<FLOAT>(GetDeviceCaps(screen, LOGPIXELSX));
        ReleaseDC(0, screen);
    float fontSize = dpiX / DEFAULT_DPI;
    
        QFont font = a.font();
        font.setPointSize(font.pointSize()*fontSize);
        a.setFont(font);

好了,這樣的話,問題解決,這樣自適應問題就解決掉了
注:這些操作都需在main主函數里面操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM