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屏幕。
相关文章:
QScreen在Qt5.15与Qt6.8版本下的区别
简述 QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI(每英寸点数)等信息。本文主要是介绍Qt5.15与Qt6环境下,QScreen的差异,以及如何判断高DPI设备。 属性说明 logicalDotsPerInch࿱…...
模具生产过程中的标签使用流程图
①NFC芯片嵌入周转筐,通过读卡器读取CK_Label_v3的数据,并将这些信息上传至服务器进行存储; ②服务器随后与客户的WMS(仓库管理系统)进行交互,记录和同步注塑机的原始数据; ③当周转筐内的模具…...
Unity-URP设置单独渲染UI相机
Unity-URP设置单独渲染UI相机 1、设置主相机层级,剔除UI层 2、新建UICamera,设置RenderType为Overiay;显示层级只选择UI层 3、选择主相机,Stack参数添加UICamera 4、Canvas设置成ScreenSpace-Camera,并指定UICamera渲…...
如何使用java来解析一个pdf文件呢?
最近搞到一个任务是要解析一套雅思题目并提取其中的高频单词。那如何使用java来解析一个pdf文件呢? 首先我们要知道这需要springboot框架来进行创建,需要的PDFTextStripper是一个用于PDF文档中提取文本的类,它是Apache PDFBox的一个类用于处…...
asp.net core发布配置端口号,支持linux
方式一,修改配置文件 appsettings.json 找到文件 appsettings.json, 添加如下节点配置,在linux环境需要设置0.0.0.0才可以正常代表本机,然后被其他机器访问,此处设置端口8000, "Kestrel": {&quo…...
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务 论文大纲理解1. 确认目标2. 分析过程(目标-手段分析)核心问题拆解 3. 实…...
JavaScript中,常用crypto模块进行rsa加密,crypto-js模块进行md5算法
Node.js 的 crypto 模块 Node.js 内置的 crypto 模块提供了基本的加密功能,可以用于生成 RSA 密钥对和执行加密、解密操作。 代码案例: const crypto require(crypto);const { publicKey, privateKey } crypto.generateKeyPairSync(rsa, {modulusLen…...
机器学习04-为什么Relu函数
机器学习0-为什么Relu函数 文章目录 机器学习0-为什么Relu函数 [toc]1-手搓神经网络步骤总结2-为什么要用Relu函数3-进行L1正则化修改后的代码解释 4-进行L2正则化解释注意事项 5-Relu激活函数多有夸张1-细数Relu函数的5宗罪2-Relu函数5宗罪详述 6-那为什么要用这个Relu函数7-文…...
基于Arduino的自动开瓶系统
自动瓶盖开启器:结合Arduino和线性运动系统的创新解决方案 展示视频: 基于Arduino的自动开瓶器 引言 在日常生活中,开启瓶盖看似是一件简单的事情,但对于某些人来说,这可能是一个挑战。特别是对于患有类风湿性关节炎…...
通过使用 contenteditable=“true“,我们彻底防止了 iOS 系统键盘的弹出
明白了,对于苹果手机(iOS),即使使用了 bindtap 和 e.preventDefault() 来阻止默认行为,系统键盘仍然可能会弹出。这是因为 iOS 对输入框的处理方式与 Android 不同,尤其是在处理 input 元素时,iOS 会更加积极地弹出键盘。 解决方案 为了彻底防止 iOS 系统键盘弹出,我…...
20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕
20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起,最近需要识别法国电影《地下铁》的法语字幕,使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…...
搜索召回:召回聚合
召回聚合 用户的查询意图往往是复杂多样的,可能涉及到不同的领域、主题和语义层面。因此,召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外,多路召回通过各召回通道并行计算可以在海量数据中能够快速响应&#…...
NTFS 文件搜索库
NTFS 文件搜索库 中文 | English 一个快速搜索NTFS卷文件的库 在这里插入图片描述 特性 快速扫描 NTFS 格式驱动器上的所有文件实时快速同步文件变更(创建, 更名, 删除)支持通配符查询文件名或文件路径重启自动更新文件变动, 无需重新进行全盘扫描 API描述 初始化并指定…...
【GoF23种设计模式】02_单例模式(Singleton Pattern)
文章目录 前言一、什么是单例模式?二、为什么要用单例模式?三、如何实现单例模式?总结 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计…...
UniApp:uni-segmented-control 自定义布局
自定义tabs选项,items 为tabs名称数组,横向滚动 <scroll-view scroll-x><view class"segmented-control"><view v-for"(item, index) in items" :key"index" class"control-item ":class"…...
【算法day17-day18】回溯:解决组合问题
不好意思呀各位,最近在忙期末考今天才彻底结束,来让我们继续算法之路吧~ 题目引用 组合电话号码的字母组合组合总和组合总和II分割回文串 1.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回…...
从监控异常发现网络安全
前言 最近在前端异常监控系统中,发现一些异常信息,从中做了一些分析,得到一些体会,因此作文。 发现异常 某天早上打开监控系统发现,当天凌晨1点过测试环境有2个前端上报的异常,报错的原因都是由于没有获取…...
Qt之自定义标题栏拓展(十)
Qt开发 系列文章 - user-defined-titlebars(十) 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…...
Verilog中initial的用法
在 Verilog 语言中,initial 语句用于在仿真开始时执行一次性初始化操作。它是顺序执行的,用来描述在仿真启动时立即运行的代码块,通常用于赋初值、生成波形或控制信号行为。 语法 initial begin // 语句1 // 语句2 ... end特点 只…...
(14)D-FINE网络,爆锤yolo系列
yolo过时了?传统的yolo算法在小目标检测方面总是不行,最新算法DEIM爆锤yolo,已经替yolo解决。 一、创新点 这个算法名为DEIM,全称是DETR with Improved Matching for Fast Convergence,其主要创新点在于提出了一…...
纯本地运行!AgentCPM深度研报助手,手把手教你离线生成研究报告
纯本地运行!AgentCPM深度研报助手,手把手教你离线生成研究报告 1. 为什么选择本地研报生成工具? 在信息爆炸的时代,专业研究报告的撰写面临三大痛点: 时间压力:从零开始撰写一份深度报告平均需要40-60小…...
3步快速修复Netgear路由器变砖的终极解决方案
3步快速修复Netgear路由器变砖的终极解决方案 【免费下载链接】nmrpflash Netgear Unbrick Utility 项目地址: https://gitcode.com/gh_mirrors/nmr/nmrpflash 路由器变砖是许多网络设备用户最头疼的问题之一,特别是当固件升级失败或意外断电导致设备无法启动…...
HRN模型与PID控制结合:实时面部动画调节系统
HRN模型与PID控制结合:实时面部动画调节系统 1. 引言 想象一下,你正在制作一部动画电影,主角的面部表情需要精确到每一帧的微妙变化。传统的手工调整方式耗时耗力,而自动生成的表情又往往缺乏自然流畅的过渡。这就是为什么我们需…...
OV7670 UART摄像头驱动开发:基于Camera_LS_Y201的嵌入式图像采集实现
1. Camera_LS_Y201 模块底层驱动技术解析Camera_LS_Y201 是一款基于 OV7670 图像传感器的低成本串口摄像头模组,其核心特征在于通过 UART 接口实现图像数据的一次性整帧传输(Bulk Transfer),而非传统逐行或分包发送方式。该方案由…...
C++协程(C++20)原理剖析:co_await的实现机制
C20引入的协程机制为异步编程带来了革命性变化,其中co_await作为核心操作符,其实现机制值得深入探讨。本文将剖析co_await背后的魔法,揭示协程如何通过挂起与恢复实现高效异步。 协程三要素解析 协程由promise对象、协程句柄和协程状态三部…...
全新升级:基于Vue3新标准的企业级后台综合解决方案实战(附源码课件)
先放资源:https://pan.quark.cn/s/a99f364f3e28 引言:后台前端开发的工程化跃迁之路 在当前互联网行业的技术迭代周期中,Web前端大厂工程师的能力模型正在经历从"页面仔"到"工程架构师"的深刻变革。单纯掌握Vue2选项式API和基础CRUD开发已无法满足阿里…...
告别LiveCharts实时绘图丢帧:深入剖析WPF数据绑定与渲染优化的五个关键点
告别LiveCharts实时绘图丢帧:深入剖析WPF数据绑定与渲染优化的五个关键点 在金融交易系统、工业监控仪表盘等实时数据可视化场景中,WPF开发者常会遇到一个棘手问题:当数据更新频率超过每秒2-3次时,LiveCharts图表开始出现明显的帧…...
Xinference-v1.17.1优化技巧:如何提升模型加载速度和推理性能,节省硬件资源
Xinference-v1.17.1优化技巧:如何提升模型加载速度和推理性能,节省硬件资源 你是否遇到过这样的困扰:每次加载大语言模型都要等待漫长的几分钟?推理过程中GPU内存爆满导致程序崩溃?或者看着高昂的云计算账单发愁&…...
ICM45686数据老飘?GD32F470的IIC时序调试与FreeRTOS延时函数那些坑
GD32F470与ICM45686通信稳定性优化实战:从时序调试到FreeRTOS延时陷阱 当惯性导航系统的数据出现飘移、丢包或完全无法读取时,多数开发者会首先怀疑传感器硬件问题。但在使用GD32F470与ICM45686构建的系统中,真正的"魔鬼"往往藏在…...
3个专业级音视频处理技巧:让新手也能轻松实现高质量转码
3个专业级音视频处理技巧:让新手也能轻松实现高质量转码 【免费下载链接】Videomass Videomass is a free, open source and cross-platform GUI for FFmpeg and yt-dlp 项目地址: https://gitcode.com/gh_mirrors/vi/Videomass 在数字内容创作领域ÿ…...
