QScreen在Qt5.15与Qt6.8版本下的区别

打印 上一主题 下一主题

主题 984|帖子 984|积分 2962

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
简述

QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI(每英寸点数)等信息。本文主要是先容Qt5.15与Qt6环境下,QScreen的差别,以及如何判断高DPI设备。

属性说明

logicalDotsPerInch:
逻辑DPI,每英寸的逻辑点数或像素数。
经过测试,Qt5.15 逻辑DPI结果会被Windows缩放影响,Qt6不被影响。
physicalDotsPerInch:
物理DPI,每英寸的物理点或像素数。此值表示屏幕显示上的像素密度,根据基础系统提供的信息,该值可能并不完全精确。
经过测试,Qt6.8 物理DPI会被Windows缩放影响,Qt5.15不被影响。
availableGeometry:
返回屏幕的可用几何地区。即清除使命栏或其他屏幕边界外的可用地区。
经过测试,Qt6.8 结果会被Windows缩放影响,Qt5.15不被影响。
physicalSize:
获取屏幕的物理尺寸(单位:毫米),即屏幕的现实物理大小。
manufacturer、model、name:
获取屏幕的厂商、模型、名称(如果有的话)。
devicePixelRatio:
返回设备的像素比(即缩放因子),对于高DPI设备,该值大于1。
经过现实测试,通过此参数,Qt6.8能直接判断高DPI设备(需要Windows放大显示来到达最佳显示效果),Qt5.15则无法判断,换了3台电脑(16寸1920*1080笔记本,大概24寸的1920*1080台式机,以及16寸2560*1600笔记本),devicePixelRatio数值一直是1。
refreshRate:
获取屏幕的革新率(单位:Hz),表示屏幕每秒钟革新的次数。
切换革新率时,Qt6.8和Qt5.15均能检测到。


获取主屏幕参数

将QScreen中的成员值打印出来,以下是获取主屏幕参数的代码:
  1. #include <QGuiApplication>
  2. #include <QScreen>
  3. #include <QDebug>
  4. int main(int argc, char *argv[])
  5. {
  6.     QGuiApplication app(argc, argv);
  7.     // 获取默认屏幕
  8.     QScreen *screen = QGuiApplication::primaryScreen();
  9.     if (screen) {
  10.         qDebug() << "logicalDotsPerInch: ";
  11.         qDebug() << screen->logicalDotsPerInch();
  12.         qDebug() << screen->logicalDotsPerInchX();
  13.         qDebug() << screen->logicalDotsPerInchY();
  14.         qDebug() << "=============================";
  15.         qDebug() << "physicalDotsPerInch: ";
  16.         qDebug() << screen->physicalDotsPerInch();
  17.         qDebug() << screen->physicalDotsPerInchX();
  18.         qDebug() << screen->physicalDotsPerInchY();
  19.         qDebug() << "=============================";
  20.         qDebug() << "availableGeometry: " << screen->availableGeometry();
  21.         qDebug() << "availableVirtualGeometry: " << screen->availableVirtualGeometry();
  22.         qDebug() << "virtualGeometry: " << screen->virtualGeometry();
  23.         qDebug() << "nativeOrientation: " << screen->nativeOrientation();
  24.         qDebug() << "orientation: " << screen->orientation();
  25.         qDebug() << "primaryOrientation: " << screen->primaryOrientation();
  26.         qDebug() << "depth: " << screen->depth();
  27.         qDebug() << "devicePixelRatio : " << screen->devicePixelRatio();
  28.         qDebug() << "manufacturer: " << screen->manufacturer();
  29.         qDebug() << "model: " << screen->model();
  30.         qDebug() << "name: " << screen->name();
  31.         qDebug() << "physicalSize: " << screen->physicalSize();
  32.         qDebug() << "refreshRate: " << screen->refreshRate();
  33.         qDebug() << "serialNumber: " << screen->serialNumber();
  34.     }
  35.     return app.exec();
  36. }
复制代码
Qt5.15.2打印结果

    logicalDotsPerInch: 
144
144
144
=============================
physicalDotsPerInch: 
188.749
188.475
189.023
=============================
availableGeometry:  QRect(0,0 2560x1528)
availableVirtualGeometry:  QRect(0,0 2560x1528)
virtualGeometry:  QRect(0,0 2560x1600)
nativeOrientation:  Qt:rimaryOrientation
orientation:  Qt:andscapeOrientation
primaryOrientation:  Qt:andscapeOrientation
depth:  32
devicePixelRatio :  1
manufacturer:  ""
model:  ""
name:  "\\\\.\\DISPLAY1"
physicalSize:  QSizeF(345, 215)
refreshRate:  60
serialNumber:  ""
  Qt6.8.1 打印结果

   logicalDotsPerInch: 
96
96
96
=============================
physicalDotsPerInch: 
125.865
125.675
126.055
=============================
availableGeometry:  QRect(0,0 1707x1019)
availableVirtualGeometry:  QRect(0,0 1707x1019)
virtualGeometry:  QRect(0,0 1707x1067)
nativeOrientation:  Qt:rimaryOrientation
orientation:  Qt:andscapeOrientation
primaryOrientation:  Qt:andscapeOrientation
depth:  32
devicePixelRatio :  1.5
manufacturer:  "BOE"
model:  ""
name:  "\\\\.\\DISPLAY1"
physicalSize:  QSizeF(345, 215)
refreshRate:  60.0006
serialNumber:  ""
  
对比运行结果

Qt5.15和Qt6.8的运行结果不一致。
将Windows缩放由150%下调至125%后,Qt5.15的运行结果显示:逻辑DPI由144变为120;
物理DPI结果不变,缩放因子依旧是1,不会随着Windows缩放而变化。

而Qt6.8的运行结果显示:逻辑DPI依旧是96,不会随着Windows缩放而发生变化。
物理DPI由125变为了150,缩放因子由1.5变为了1.25,availableGeometry相关的数据也发生了变化。

判断高DPI屏幕

关于判断是否为高DPI屏幕,在Qt5.15环境下需要用 logicalDotsPerInch/96,得到的值为缩放因子(原devicePixelRatio值不可用);而在Qt6.8环境下,可以直接通过缩放因子(devicePixelRatio > 1)判断是否为高DPI屏幕。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表