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屏幕。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0004.基于springboot+elementui的在线考试系统

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 愿世界和平再无bug 一、系统架构 前端&#xff1a;vue| elementui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、登录角色 1.管理员 2.老师 …

【Laravel】端口问题导致菜单打不开

以下是修改 Laravel 应用程序的端口配置&#xff0c; 修改环境变量 APP_URL 来实现 app/Providers/AppServiceProvider.php <?phpnamespace App\Providers;use Illuminate\Events\Dispatcher; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\URL…

【数据分析】数据结构数据内容概述

文章目录 表格结构数据特征数据类别结构化数据表格结构数据层级表格结构的数据类型单元格的格式属性 表格结构数据获取方法从企业后台数据库系统获取后台数据库系统获取数据流程前端操作平台获取从企业外部渠道获取数据 表格结构数据使用方法单元格值的引用方法单元格区域值的引…

makefile文件

简介&#xff1a; 自动化编译&#xff1a;只需要一个make命令&#xff0c;整个工程自动编译 提高编译效率&#xff1a;再次编译时&#xff0c;只编译修改的文件&#xff08;查看时间戳&#xff0c;根据修改文件的时间判断文件是否被修改&#xff09; 基本语法&#xff1a; …

STM32-笔记3-驱动蜂鸣器

1、复制03项目&#xff0c;重命名为04项目 打开04项目的Drivers/BSP/led文件夹&#xff0c;把led文件夹更改为beep文件夹&#xff0c;改文件夹内部的.c和.h文件更改为beep.c和beep.h文件&#xff0c;如下图所示。 2、打开工程文件 出现弹窗&#xff0c;显示找不到xx文件&#…

阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等和正常的症状

阿尔茨海默症数据集,使用yolo&#xff0c;voc&#xff0c;coco格式对2013张原始图片进行标注&#xff0c;可识别轻微&#xff0c;中等&#xff0c;严重和正常的症状 数据集分割 训练组100&#xff05; 2013图片 有效集&#xff05; 0图片 测试集&#xf…

uniapp v-tabs修改了几项功能,根据自己需求自己改

根据自己的需求都可以改 这里写自定义目录标题 1.数组中的名字过长&#xff0c;导致滑动异常2.change 事件拿不到当前点击的数据&#xff0c;通过index在原数组中查找得到所需要的id 各种字段麻烦3.添加指定下标下新加红点显示样式 1.数组中的名字过长&#xff0c;导致滑动异常…

k8s kubernetes

文章目录 CGroupk8s运行时k8s组件k8s组件安装kubeadm命令kubectl命令k8s官网代码 CGroup 在 Linux 上&#xff0c;控制组&#xff08;CGroup&#xff09;用于限制分配给进程的资源。kubelet 和底层容器运行时都需要对接控制组来强制执行 为 Pod 和容器管理资源 并为诸如 CPU、…

学习笔记072——Java中的【JUC 并发编程】

文章目录 JUC 并发编程1、什么是高并发2、Java 实现多线程的第三种方式3、sleep 和 wait 方法的区别4、synchronized 锁定的是谁&#xff1f;5、ConcurrentModificationException6、JUC 工具类7、读写锁8、线程池 JUC 并发编程 JUC 是指 Java 并发编程工具包 java.util.concu…

【报错解决】vsvars32.bat 不是内部或外部命令,也不是可运行的程序或批处理文件

报错信息&#xff1a; 背景问题&#xff1a;Boost提示 “cl” 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件时&#xff0c;   按照这篇博客的方法【传送】添加了环境变量后&#xff0c;仍然报错&#xff1a; 报错原因&#xff1a; vsvars32.bat 的路径不正…

简单配置,全面保护:HZERO审计服务让安全触手可及

HZERO技术平台&#xff0c;凭借多年企业资源管理实施经验&#xff0c;深入理解企业痛点&#xff0c;为您提供了一套高效易用的审计解决方案。这套方案旨在帮助您轻松应对企业开发中的审计挑战&#xff0c;确保业务流程的合规性和透明度。 接下来&#xff0c;我将为大家详细介绍…

使用nvm对node进行多版本管理

1.nvm下载及安装 下载链接 下载完成后&#xff0c;对文件进行解压安装&#xff0c;按照提示一步步安装&#xff0c;如果电脑上之前有安装过node&#xff0c;需要先卸载&#xff0c;再进行安装。 按照提示完成安装。 2.设置环境变量 可以现在C:\Users\name\AppData\Roamin…

【JavaEE初阶】JavaScript相应的WebAPI

目录 &#x1f332;WebAPI 背景知识 &#x1f6a9;什么是 WebAPI &#x1f6a9;什么是 API &#x1f38d;DOM 基本概念 &#x1f6a9;什么是 DOM &#x1f6a9;DOM 树 &#x1f340;获取元素 &#x1f6a9;querySelector &#x1f6a9;querySelectorAll &#x1f384…

基于MNE的EEGNet 神经网络的脑电信号分类实战(附完整源码)

利用MNE中的EEG数据&#xff0c;进行EEGNet神经网络的脑电信号分类实现&#xff1a; 代码&#xff1a; 代码主要包括一下几个步骤&#xff1a; 1&#xff09;从MNE中加载脑电信号&#xff0c;并进行相应的预处理操作&#xff0c;得到训练集、验证集以及测试集&#xff0c;每个…

SCHEMA find old payroll result

这几天原来HK客户要我帮忙看一个问题&#xff0c;在看HK雇佣条例时&#xff0c;发现又假期是取前12个月的工资&#xff0c;后来查看标准函数发现两个有用的operation&#xff0c;PLOOP与IMPRE 下图是2012年6月工资核算&#xff0c;现在循环着前面4个月。 输入 输出 2012年5月…

【ARM Trace32(劳特巴赫) 使用介绍 1 -- Trace32 debug 工具安装详细步骤】

文章目录 Trace32 工具解压查看安装手册准备安装设置安装目录指定安装目录选择安装类型:选择平台架构开始安装Trace32 应用打开使用界面Trace32 工具解压 使用 7-zip 解压两次: 查看安装手册 安装步骤按照文档中的 1、2、3 进行: 在解压文件中找到安装工具,如下: 准备…

Flux Tools 结构简析

Flux Tools 结构简析 BFL 这次一共发布了 Canny、Depth、Redux、Fill 四个 Tools 模型系列&#xff0c;分别对应我们熟悉的 ControlNets、Image Variation&#xff08;IP Adapter&#xff09;和 Inpainting 三种图片条件控制方法。虽然实现功能是相同的&#xff0c;但是其具体…

【物联网技术与应用】实验3:七彩LED灯闪烁

实验3 七彩LED灯闪烁 【实验介绍】 七彩LED灯上电后&#xff0c;7色动闪光LED模块可自动闪烁内置颜色。它可以用来制作相当吸引人的灯光效果。 【实验组件】 ● Arduino Uno主板* 1 ● USB数据线* 1 ● 7彩LED模块*1 ● 面包板*1 ● 9V方型电池*1 ● 跳线若干 【实验原…

Web 安全必读:跨站脚本攻击 (XSS) 原理与防御指南

文章目录 原理解析&#xff1a;触发方式 文件内容中的xss文件名中的xssHTTP请求中的xss其他 分类&#xff1a; 根据攻击脚本存储的方式根据脚本是否通过服务器处理根据持久性 常见的js触发标签 无过滤情况有过滤情况 xss-labs通关 level1-level10level11-level20 XSS&#x…

Set集合进行!contains判断IDEA提示Unnecessary ‘contains()‘ check

之前写过一个代码&#xff0c;用到了Set集合&#xff0c;判断了如果某个元素不存在就添加到集合中。今天翻看代码又看到了IDEAUnnecessary contains() check爆黄提示。 来一段测试代码&#xff1a; public class SetTest {public static void main(String[] args) {Set<Int…