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

简述

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中的成员值打印出来,以下是获取主屏幕参数的代码:

#include <QGuiApplication>
#include <QScreen>
#include <QDebug>int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);// 获取默认屏幕QScreen *screen = QGuiApplication::primaryScreen();if (screen) {qDebug() << "logicalDotsPerInch: ";qDebug() << screen->logicalDotsPerInch();qDebug() << screen->logicalDotsPerInchX();qDebug() << screen->logicalDotsPerInchY();qDebug() << "=============================";qDebug() << "physicalDotsPerInch: ";qDebug() << screen->physicalDotsPerInch();qDebug() << screen->physicalDotsPerInchX();qDebug() << screen->physicalDotsPerInchY();qDebug() << "=============================";qDebug() << "availableGeometry: " << screen->availableGeometry();qDebug() << "availableVirtualGeometry: " << screen->availableVirtualGeometry();qDebug() << "virtualGeometry: " << screen->virtualGeometry();qDebug() << "nativeOrientation: " << screen->nativeOrientation();qDebug() << "orientation: " << screen->orientation();qDebug() << "primaryOrientation: " << screen->primaryOrientation();qDebug() << "depth: " << screen->depth();qDebug() << "devicePixelRatio : " << screen->devicePixelRatio();qDebug() << "manufacturer: " << screen->manufacturer();qDebug() << "model: " << screen->model();qDebug() << "name: " << screen->name();qDebug() << "physicalSize: " << screen->physicalSize();qDebug() << "refreshRate: " << screen->refreshRate();qDebug() << "serialNumber: " << screen->serialNumber();}return app.exec();
}

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::PrimaryOrientation
orientation:  Qt::LandscapeOrientation
primaryOrientation:  Qt::LandscapeOrientation
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::PrimaryOrientation
orientation:  Qt::LandscapeOrientation
primaryOrientation:  Qt::LandscapeOrientation
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屏幕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…

shell8

until循环(条件为假的时候一直循环和while相反) i0 until [ ! $i -lt 10 ] doecho $i((i)) done分析 初始化变量&#xff1a; i0&#xff1a;将变量i初始化为0。 条件判断 (until 循环)&#xff1a; until [ ! $i -lt 10 ]&#xff1a;这里的逻辑有些复杂。它使用了until循环…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

frp内网穿透笔记

文章目录 一、环境介绍二、配置过程2.1 下载文件2.3 服务器A的配置2.3 目标机B的配置2.4 电脑C怎么用 三、问题汇总 一、环境介绍 带公网的vps服务器A&#xff0c;需要穿透到的无公网目标电脑B&#xff0c;以及一台需要通过公网访问B的电脑C。frp 0.47.0&#xff1a;frp_0.47.…

PostgreSQL的交互式终端使用一系列命令来获取有关文本搜索配置对象的信息

在 psql&#xff08;PostgreSQL 的交互式终端&#xff09;中&#xff0c;你可以使用一系列命令来获取有关文本搜索配置对象的信息。这些命令主要围绕 \dF 系列&#xff0c;以及使用 SQL 查询 pg_ts_config 系统视图。以下是你可以使用的一些方法&#xff1a; 使用 \dF 系列命令…

写定制程序容易遇见的问题(FLASH不够时)

做了一个关于定制两条串口协议的活&#xff0c;主要是要在源代码基础上进行修改。源代码只剩了200多字节flash。本来最初我的想法很奇特&#xff0c;用结构体来模仿寄存器的写法。当我写完几行代码后&#xff0c;编译链接&#xff0c;立马就报CODE内存超了。 然后最终还是选择…

【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变

问题背景 给定一个整数数组 n u m s nums nums&#xff0c;处理以下类型的多个查询&#xff1a; 计算索引 l e f t left left 和 r i g h t right right&#xff08;包含 l e f t left left 和 r i g h t right right&#xff09;之间的 n u m s nums nums 元素的 和 &a…

本地缓存和Redis缓存 存储更新时间的更新套路

//先获取redis key和local key //从reids中获取数据 – 为空 先设置redis缓存30天,value为当前时间 然后设置本地缓存,value为当前时间 从数据库里读数据 – 不为空 获取本地缓存时间 if本地缓存时间 < redis缓存时间(认为已更新)或者本地为空 从数据库读数据 else 从本地缓…

处理错误的两种方式:try...catch 与 then...catch

一、try...catch try...catch 是一种用于捕获和处理同步代码中异常的机制。其基本结构如下&#xff1a; try {// 可能会抛出异常的代码 } catch (error) {// 处理异常 }使用场景&#xff1a; 主要用于同步代码&#xff0c;尤其是在需要处理可能抛出的异常时。适用于函数调用…

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…

【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?

解决App配置相关问题列表 1、Harmony Next如何配置图标&#xff1f; 2、Harmony Next如何配置App名称&#xff1f; 3、Harmony Next如何配置版本号&#xff1f; 4、Harmony Next如何配置Bundle ID? 5、Harmony Next如何配置build号&#xff1f; 6、Harmony Next多语言配置在哪…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

Anthropic 工程师关于提示词工程的深入探讨

李玉光 北京聚云科技有限公司 联合创始人兼首席架构师 拥有 12 年以上的 Amazon Web Services 开发与架构经验。擅长设计和实施大规模、高弹性、自动化的云原生解决方案。云成本优化方面经验丰富&#xff0c;帮助众多企业有效降低云使用成本。并协助各类行业客户利用 Amazon We…

SpringBoot之validation参数校验并返回统一格式提示

前言 在日常的开发过程中&#xff0c;后端需要经常对参数进行校验&#xff0c;比如某参数不能为空&#xff0c;格式等&#xff0c;只有校验通过后才可以执行后续的业务逻辑&#xff0c;否则就要在接口返回错误信息给前端。 一般情况下&#xff0c;可以使用if…else…来校验参数…

【技术干货】移动SDK安全风险及应对策略

移动SDK&#xff08;软件开发工具包&#xff09;已经成为应用开发中不可或缺的一部分。通过SDK&#xff0c;开发者能够快速集成分析、广告调度、音视频处理、社交功能和用户身份验证等常见功能&#xff0c;而无需从零开始构建。这不仅能节省时间和资源&#xff0c;还能提高开发…

MATLAB中cvx工具箱的使用

CVX 是 MATLAB 中一个用于解决凸优化问题的建模工具箱。它使得定义、求解和分析凸优化问题变得简单。CVX 允许用户用类似数学表达的方式编写凸优化问题&#xff0c;而不需要过多关注底层的优化算法。CVX 的核心功能是将一个简单的数学问题转化为 MATLAB 可以理解并求解的标准形…

易语言OCR银行卡文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?

在新能源汽车行业迅猛发展的今天&#xff0c;智慧充电桩作为支持这一变革的关键基础设施&#xff0c;正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区&#xff0c;从企业园区到住宅小区&#xff0c;智慧充电桩不仅提供了便捷的充电服务&#xff0c;还通过…

QT多媒体开发(一):概述

Qt Multimedia 模块为多媒体编程提供支持。多媒体编程实现的功能主要包括播放音频和视频文件&#xff0c;通过麦克风录制音频&#xff0c;通过摄像头拍照和录像等。 QT6 中多媒体模块相比QT5变化较大&#xff0c;所以用QT6编译 QT5写的多媒体 程序基本无法通过。 Qt 5 多媒体模…

道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”

道可云元宇宙每日简报&#xff08;2024年12月20日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日&#xff0c;浙江工商大学发布了《人工智能时代创新型人才培养行动计划》&#xff0c;提出人工…