Qt 高分屏适配和QSS单位

启用高分屏适配

1 #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
2     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
3 #endif

 当QApplication设置上述属性后,qt会自动根据当前系统缩放比例进行调整。
但是该属性调整的只有px指定的值。

例如:

1 #labelPt
2 {
3 font-size:9pt;
4 }
1 #labelPx
2 {
3 font-size:12px;
4 }

在上述两种qss代码中,labelPt指定的字体大小是pt而labelPx指定的字体大小是px。当系统缩放设置是100%的时候这两种表述并没有什么区别。但是当系统缩放设置改变之后,labelPx的大小会随之发生改变,而labelPt则不会。这是因为px代表的是像素数,而pt代表的是点大小,然而系统缩放设置所针对的就是px像素值。即当系统缩放设置为200%的时候,系统会直接使用4个像素点来显示一个像素。而pt所表示的则是物理尺寸,通过以下方法换算。

1pt=0.376毫米=1.07英美点=0.0148英尺=0.1776英寸。

即在一般的显示器上,所有显示器pt所指代的大小都是固定的,这各值是可以用尺子量出来的。
另外一个意思就是pt本身就是随着显示器dpi进行缩放的。而px不是。

实际应用
综上所述。在实际写程序的过程中,单位一定要统一。如果使用pt就所有的尺寸都使用pt表示。如果使用px就统一使用px。
这样具有更好的兼容性。

补充:qss单位
  pt:上面讲过,点大小。具体尺寸会随屏幕dpi进行改变。
  px:像素大小,会随系统缩放设置进行改变。
  em:字符M所对应的宽度,会随控件font-size和font-family属性改变。基本上是一个汉字的宽度
  ex:字符X的高度,同样会随控件fong-size和font-family属性改变。
  %:百分比,QT支持,但是一直没搞明白它是相对于谁的百分比。也一直没用过。
实战
提供一下qss代码,各位可以试试效果。

 1 QLabel
 2 {
 3 font-size:9pt;            //字体大小9个点
 4 padding-left:1em;        //左padding 1个M字符的宽度,
 5 padding-right:1em;
 6 padding-top:0.4em;        //距离顶部0.4个汉字的宽度
 7 padding-bottom:0.4em;
 8 }
 9 /***********************************/
10 QLabel
11 {
12 font-size:12px;
13 padding-left:6px;
14 padding-right:6px;
15 padding-top:3px;
16 padding-botton:3px;
17 }
18 /***********************************/
19 QLabel
20 {
21 font-size:12px;
22 padding-left:1em;
23 padding-right:1em;
24 padding-top:0.4ex;
25 padding-bottom:0.4ex;
26 }
原文地址:https://www.cnblogs.com/ybqjymy/p/14821801.html