关键词: QFont QFontMetrics pointSize 点大小 pixelSize 像素大小 屏幕分辨率 DPI:每英寸像素点

总结:

  1. 正常情况下,字体设置都是设置成 像素大小的。 --qss 。
  2. 窗口 组件 这些大小也是按照像素大小来设置的。
  3. 点大小: 物理上的空间大小不变,使用的屏幕像素改变 。
  4. 像素大小: 物理空间大小变化(肉眼区分出大小),屏幕像素个数不变。

相关概念

DPI: Dot per inch,在显示器上也就是每英寸包含的像素。英尺的换算为 1 inch = 2.54 cm。
Qt屏幕DPI计算及pointSize和pixelSize的关系

QFontMetrics :
QFont

QFontMetrics获取字体宽度小示例 :

QFont当中有两种方式设置字体大小,PixelSize、PointSize,即像素大小和点阵大小。
QPointSize实际是磅,也就是 1/72 inch
QPixelSize = DPI * Point / 72
什么是DPI,就是每英寸的点数,大部分显示器的DPI为90.6左右,但windows为了方便就同一了点距,为96。Ubuntu的点距也是96。
字体在屏幕上的实际大小 = 字体像素大小 * 点距。
一般情况用pixel,字体将不受 DPI 的影响,默认是 pointSize。

QFont(“Microsoft YaHei”,15) : 中的15 是** 点大小** 。 --默认的设置的都是点大小。 – 随着DPI 改变而改变。

现在: 屏幕分辨率都是1920*1020 ,但是屏幕大小与明显区别。其中,有显示问题的是小屏幕的。
两个大小不同的屏幕下,QLabel的文字显示的大小却是相似的。—所以在被人的提示下,怀疑是点大小和像素大小的问题。

Qt的pointSize和pixelSize,qt字体大小自适应

使用QFont的setPointSize,此时字体的大小会跟随DPI改变而改变。 【我】物理上的空间大小不变,使用的屏幕像素改变。
使用QFont的setPixelSize,此时字体的大小不会随DPI的改变而发生变化。 【我】 相反,即物理空间大小变化(肉眼区分出大小)。

小屏幕 DPI 大,但是分辨率一样: setPointSize -》 点大小 -》 相对大屏幕的字,用到更多的像素点,但是实际的文字暂用的空间大小(cm)却是一样的。 —如果把这个换成1980*1020的led大屏的话, 那么字就看不到了。
那么问题是:
点大小的标准是什么?【我: 会是有一个标准的DPI下设置的吗?】
为什么用稍微大尺寸的显示屏显示的点大小刚好(因为QLabel setFixHeight = 15 ) 而用小屏幕(笔记本电脑) 就被截断了。
印象中【印象中是用qss的,而且是用的px ,也就是设置像素大小的-不矛盾】和qt 默认都是用的 点大小【qt倒是在构造方法中默认是点大小】???
还有QLabel setFixSize() 的大小是 点大小还是像素大小(从表现来看是像素大小-小屏幕的label小,物理尺寸变小。)
以后设置字体是用默认的点大小还是像素大小?? --从印象中通过qss的方式设置

其他相关知识:

通过qss来实现:
PointSize: font-size:16pt;
PixelSize: font-size:16px; --平时用的。 也就是所按像素大小来绘制的。

QFontMetrics 相关用法

  1. 获取文本+字体大小下的长度和高度大小。
  2. 实现 过长文字内容 用 … 省略的方法。
    QFontMetrics 实现文字显示长度控制 : 参考这个。 关键词:

elidedText()
fontMetrics().width(QString s): //获取字符串s的总像素宽度。
fontMetrics().height(): //获取字体的高度。
fontMetrics().lineSpacing(): //获取字体的高度,包括文字的实际宽度和行距。
fontMetrics().leading(): //行间距

3.Qt 设置依据分辨率改变label字体

注意点:
1.如果在构造函数中就使用SetElideText函数,因为此时窗口未显示,所以这个时候得到的label宽度与显示之后的不同,那么最终显示的文本长度(或…的位置也不正确)
2.QFontMetrics的一个问题

今天发现QFontMetric的一个问题
QFontMetrics可以输入一个字体和一个字符串,计算出字符串在这种字体下的显示尺寸。
这种计算比较耗时间,因此Qt内部应该是缓存了计算结果。具体方法是在第一次调用时,把QFontMetrics绑定的字体内部每个字的尺寸都计算出来,以后对相同字体求大小的时候便可以直接查询每个字的尺寸,最后累加出大小返回给用户。
问题在于QFont允许通过setPointSizeF设置浮点数字号,这样若程序需要动态计算出字号,则每次计算的结果都不相同,于是基本上缓存会无限制增长,形成事实上的内存泄漏。。。
解决方法是尽量采用setPointSize设置整数字号。

Qt 之图形(绘制文本) :

Qt 之图形(绘制文本) : 一去二三里的博客,可以学习下绘制。

其他内容

通过win系统显示改变分辨率来验证猜想:

通过缩放来改变应用程序的大小,但是这个会改变分辨率吗?

Qt :语法: QFont QFontMetrics pointSize 点大小 pixelSize 像素大小 屏幕分辨率 DPI:每英寸像素点相关推荐

  1. QT中如何固定窗口的大小?

    QT中如何固定窗口的大小? 一种方法是设置它的最大大小和最小大小,并且使它们的值相等,都等于当前你设置的窗口尺寸.简单的示例: setMinimumSize(370, 150);setMaximumS ...

  2. linux qt程序窗口大小变化,Linux-Qt - 程序界面大小自适应屏幕分辨率

    来源: http://blog.163.com/dingmz_frcmyblog/blog/static/2173040232013251021450/ 方法一:针对当前背景图片.控件坐标等等都已经提 ...

  3. JS获取当前对象大小以及屏幕分辨率等...

    <!DOCTYPE html> <html> <head><meta charset="utf-8"/><meta name= ...

  4. wpf 放大缩小界面_调整电脑屏幕文本文字显示大小,系统设置放大缩小DPI图文教程...

    大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频. 今天我们讲一下调整屏幕文字显示大小,刚安装完电脑如果分辨率很大,可能显示的文字比较小,我们如果想调整 ...

  5. [转]JS获取当前对象大小以及屏幕分辨率等

    http://www.cnblogs.com/tearer/archive/2010/09/06/1819471.html JS获取当前对象大小以及屏幕分辨率等 Code highlighting p ...

  6. JS获取当前对象大小以及屏幕分辨率等

    这些天用JS调界面,就在网络上搜索了一些关于获取当前窗口对象大小的写法.记录一下~ JS获取大小各参数<script>function getInfo(){var s = "&q ...

  7. Qt界面制作(QSS、获取屏幕分辨率、自定义控件、版权)

    源码下载地址: https://download.csdn.net/download/qq78442761/10534055 程序运行截图: 程序版权 程序结构图如下: 主要就几点: 1.QSS 2. ...

  8. android 全局dp单位,android应用开发之View的大小计量单位(px、dpi、dp、dip、sp)

    http://blog.csdn.net/ljianhui/article/details/43601495?ref=myread 一.像素(px)与屏幕分辨率 1)px(Pixels ,像素):对应 ...

  9. html读取媒体长度,用媒体查询media根据屏幕分辨率大小确定网页宽度

    显示网页的终端屏幕分辨率大小不一,为了能使同一网页能在不同的终端中合适显示,CSS3 推出了媒体查询media.用媒体查询media能根据屏幕分辨率大小确定网页宽度,这主要在 CSS 文件中根据屏幕分 ...

最新文章

  1. C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...
  2. 实现类的多态性,方法的重写和重载
  3. Spring Boot 介绍、入门
  4. linux计划任务30秒,Linux 计划任务(at batch crontab anacron)
  5. 第十四章 七段数码管绘制时间
  6. Python Tricks(十二)—— 有理数的加法
  7. html5 sessionStorage 与 localStorage存储
  8. HPE Comware Lab - Simulator
  9. mac Error: EACCES: permission denied, mkdir './cache'
  10. python取整符号_python 取整
  11. 高性能计算服务器8280,AMD秀实力:第二代霄龙64核性能是英特尔Xeon Platinum8280两倍...
  12. 基于python的李代数实现方法
  13. 计算机英语中poke什么意思,poke one是什么意思
  14. 豆酱小白与python(一):提取B站弹幕并制作词云
  15. 安全-流量劫持形成的原因
  16. 幻影虚拟位置破解版连接不到服务器,ffbe幻影战争与服务器连接失败怎么办
  17. 06 | 职位描述(JD)不是摆设,看懂招聘岗位
  18. 南通python培训机构
  19. 圣诞节贺卡计算机基础知识,圣诞节贺卡的优美句子大全
  20. 5.31 京东618热爱V1.6 批量账户使用教程

热门文章

  1. iptables规则表
  2. 从程序员到项目经理(二):升职之辨
  3. Oracle11g:rman备份-备份集、镜像复制和加密
  4. 摹客3月重点功能更新
  5. 如何通过安卓来为自己赚钱
  6. 金蝶EAS,设置界面大小、窗口标题、按钮可用
  7. 《MongoDB入门教程》第01篇 MongoDB简介
  8. NLP学习笔记一(语言模型+NLM+Word2Vec)
  9. OpenStack在Uubutu上的一键安装
  10. Windows远程桌面工具连接Ubuntu系统使用总结