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

QT自适应界面 处理高DPI 缩放比界面乱问题

1.pro文件添加 必须添加要不找不到 QT版本需要 5。4 以上才支持

QT += widgets

2.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);

2.1 使用了一些部分高dpi 好像没啥用处  有的电脑又可以需要自己挑选是否支持

    //    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);//    QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);// 启用高 DPI 缩放//     QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//     QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);//     qputenv("QT_ENABLE_HIGHDPI_SCALING", "1");//     QApplication::setAttribute(Qt::AA_Use96Dpi);//     qputenv("QT_SCALE_FACTOR", "1");这个是Windows平台用来获取屏幕宽度的代码,因为在qApplication实例初始化之前,QGuiApplication::screens();无法使用。禁用缩放//    qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "0");//    QApplication::setAttribute(Qt::AA_DisableHighDpiScaling);//    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();//        env.insert("QT_ENABLE_HIGHDPI_SCALING", "0");//        qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");//    qputenv("QT_SCALE_FACTOR", "1");//    qputenv("QT_ENABLE_HIGHDPI_SCALING", "1");//    QApplication::setAttribute(Qt::AA_Use96Dpi);禁用缩放  150 没什么效果QProcessEnvironment env = QProcessEnvironment::systemEnvironment();env.insert("QT_ENABLE_HIGHDPI_SCALING", "0");qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");测试发现AA_Use96Dpi属性在Qt5.9以上版本完全正常,以下版本比如5.7有部分控件在175%缩放不正常比如QTextEdit,需要外层套个widget才行。// #if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))//     QApplication::setAttribute(Qt::AA_Use96Dpi);// #endif//     QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);//     if (qgetenv("QT_FONT_DPI").isEmpty())//     {//         qputenv("QT_FONT_DPI", "96");//         qputenv("QT_SCALE_FACTOR", "1.0");//     }//    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//    qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");//设置界面跟随UI中设计的一样,取物理尺寸,不取分辨率尺寸显示//这个是修改界面的文本缩放大小//    这个是Windows平台用来获取屏幕宽度的代码,//    因为在qApplication实例初始化之前,QGuiApplication::screens();无法使用。//    qreal  cx = GetSystemMetrics(SM_CXSCREEN);//     qDebug()<<"cx:"<<cx;//    qreal scale = cx / 960;				// 960 = 1920 / 2//    qputenv("QT_SCALE_FACTOR", QString::number(scale).toLatin1());

High-DPI Support in QT

一、qt 从5.4版本开始支持高DPI,开启高DPI支持的方法是通过配置环境变量

1,添加环境变量 QT_DEVICE_PIXEL_RATIO = auto

2, 需要设置缩放比例 QT_SCALE_FACTOR,该值决定界面缩放的比例,只设置第一步不会看到界面尺寸的改变。

二、qt从5.6版本起,抛弃使用5.4版本中通过配置环境变量开启High-DPI的方法,改为通过调用API

	QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

 注意:该代码的调用必须在QApplication对象生成之前才能生效。示例如下:

int main(int argc, char *argv[])

{

QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
另外,这种方式的缩放比例支持整倍缩放,例如 125%会被当成1倍,150%、175%会被2倍缩放。

三、相关链接

http://blog.qt.io/blog/2016/01/26/high-dpi-support-in-qt-5-6/

http://doc.qt.io/qt-5/highdpi.html

总结一下:

  • main 函数加代码,支持缩放。
  • 确保所有尺寸单位使用 px,尤其是确保字体尺寸单位是 px 而非 pt。
  • 必须 Qt 5.14 以上版本。请删除之前用于适配 Qt 5.13 以前版本用的高分屏适配代码。

http://www.lryc.cn/news/347071.html

相关文章:

  • 序列到序列模型在语言识别Speech Applications中的应用 Transformer应用于TTS Transformer应用于ASR 端到端RNN
  • 【Linux】- Linux环境变量[8]
  • 前端笔记-day04
  • 计算机字符集产生的历史与乱码
  • Rerank进一步提升RAG效果
  • 使用train.py----yolov7
  • 机器学习第37周周报 GGNN
  • Baidu Comate:释放编码潜能,革新软件开发
  • MATLAB的Bar3函数调节渐变色(内附渐变色库.mat及.m文件免费下载链接)
  • 使用 TensorFlow.js 和 OffscreenCanvas 实现实时防挡脸弹幕
  • 【计算机网络篇】数据链路层(10)在物理层扩展以太网
  • conan2 基础入门(03)-使用(msvc为例)
  • uniapp this 作用域保持的方法
  • vue2 与vue3的差异汇总
  • Java反射(含静态代理模式、动态代理模式、类加载器以及JavaBean相关内容)
  • Scoop国内安装、国内源配置
  • 【软件开发规范篇】JAVA后端开发编程规范
  • 数据结构与算法学习笔记三---循环队列的表示和实现(C语言)
  • vue3中的reactive和ref
  • Centos安装 docker和docker-compose
  • VUE 或 Js封装通用闭包循环滚动函数
  • 个人所得税计算器
  • 网络工程师----第二十四天
  • 后端常用技能:基于easy-poi实现excel一对多、多对多导入导出【附带源码】
  • PDF转word转ppt软件
  • 如何评价2023年第八届数维杯数学建模ABC题?
  • CentOS 7 :虚拟机网络环境配置+ 安装gcc(新手进)
  • 智慧法治:AI技术如何赋能法律行业创新
  • K-RTD01和利时FW248中控卡件
  • [蓝桥杯]真题讲解:合并数列(双指针+贪心)