启用高分屏适配
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 }