当前位置: 首页 > news >正文

Qt 程序 DPI 适配方法归纳

方案1:通过 Windows api 处理

缺点:放大之后界面会模糊。

  • 通过调用api实现
#include <ShellScalingAPI.h>
#pragma comment(lib, "Shcore.lib")HRESULT hr = SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);
  • 或者使用qt.conf 实现

在资源qrc里添加,:/qt/etc/qt.conf, qt.conf 文件内容为:

[Platforms]
WindowsArguments = dpiawareness=1

dpiawareness 的取值0,1,2取自枚举:PROCESS_DPI_AWARENESS

typedef enum PROCESS_DPI_AWARENESS {PROCESS_DPI_UNAWARE = 0,PROCESS_SYSTEM_DPI_AWARE = 1,PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;

PROCESS_DPI_UNAWARE
值: 0
DPI 不知道。 此应用不会缩放 DPI 更改,并且始终假定其比例系数为 100% (96 DPI) 。 系统将在任何其他 DPI 设置上自动缩放它。
PROCESS_SYSTEM_DPI_AWARE
值:1
系统 DPI 感知。 此应用不会缩放 DPI 更改。 它将查询 DPI 一次,并在应用的生存期内使用该值。 如果 DPI 发生更改,应用将不会调整为新的 DPI 值。 当 DPI 与系统值发生更改时,系统会自动纵向扩展或缩减它。
PROCESS_PER_MONITOR_DPI_AWARE
值: 2
按监视器 DPI 感知。 此应用在创建 DPI 时检查 DPI,并在 DPI 发生更改时调整比例系数。 系统不会自动缩放这些应用程序。

方案2:Qt处理(Qt 5.14 以上版本)

遗留问题:不同分辨率下gif图片会出现锯齿、模糊

  • 在 main() 中添加如下代码:
	// 1. 全局缩放使能QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); // 2. 适配非整数倍缩放		QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);// 3. 适配字体渲染 hintingQFont font;font.setStyleStrategy(QFont::PreferAntialias);font.setHintingPreference(QFont::PreferFullHinting);QApplication::setFont(font);
  • 确保所有的尺寸单位使用 px

qt字体的默认单位为 pt,而 pt 作为尺寸单位在自动缩放时存在问题。因此,需要手动设定所有字体大小,一种方法是在 Qt Designer 中编辑目标控件的 stylesheet 将字体尺寸用 px 重新设定。二种方法是在代码中设定字体大小(代码中设定尺寸默认单位均为 px)。

方案3:Qt6

升级到qt6之后基本解决了常见问题,不过qt6不支持win7

方案4:Qt低版本,计算DPI系数,逐个设置控件大小。

繁琐,但好用,没有qt给的解决方案的各种问题

	double  G_RATIO_X;...#define RATIO_X(x) (G_RATIO_X*(x))...//系统DPIQDesktopWidget desk;G_RATIO_X = desk.logicalDpiX()*1.0 / (DPI_DEFUALT*1.0);//DPI_DEFUALT 是96//设置大小resize(RATIO_X(800), RATIO_X(600));...pLabel->setFixedSize(RATIO_X(18), RATIO_X(18));
http://www.lryc.cn/news/522519.html

相关文章:

  • AI刷题-小R的随机播放顺序、不同整数的计数问题
  • windows 极速安装 Linux (Ubuntu)-- 无需虚拟机
  • 【影刀_常规任务计划_API调用】
  • 参数校验 Spring Validation框架
  • Spring Boot 基础入门指南
  • doc、pdf转markdown
  • 基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day 1
  • 知识图谱入门(一)
  • springboot项目-基础数据回显
  • LabVIEW实现油浸式变压器自主监测与实时报告
  • K8S 亲和性与反亲和性 深度好文
  • 关于php语言api接口开发的流程
  • 医疗集群系统中基于超融合数据库架构的应用与前景探析
  • 浅谈云计算15 | 存储可靠性技术(RAID)
  • 43.Textbox的数据绑定 C#例子 WPF例子
  • LLM大语言模型的分类
  • 【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio
  • 【深度学习】神经网络之Softmax
  • 容器渗透横向
  • 黑马Java面试教程_P1_导学与准备篇
  • 《自动驾驶与机器人中的SLAM技术》ch4:预积分学
  • Docker部署MySQL 5.7:持久化数据的实战技巧
  • Spring框架 了解
  • 低代码独特架构带来的编译难点及多线程解决方案
  • 如何使用Ultralytics训练自己的yolo5 yolo8 yolo10 yolo11等目标检测模型
  • Java技术栈 —— Andorid开发入门
  • Qt天气预报系统获取天气数据
  • 力扣 搜索二维矩阵
  • JavaScript 操作符与表达式
  • 深度学习 Pytorch 张量(Tensor)的创建和常用方法