解决背景

在一次做我的项目的过程中,公司让我做高分屏适配,就是让咱们所开发的软件反对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主函数外面操作