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 }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM