启用高分屏适配
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
当QApplication
设置上述属性后,qt会自动根据当前系统缩放比例进行调整。
但是该属性调整的只有px指定的值。
例如:
#labelPt
{
font-size:9pt;
}
#labelPx
{
font-size:12px;
}
在上述两种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代码,各位可以试试效果。
QLabel
{
font-size:9pt; //字体大小9个点
padding-left:1em; //左padding 1个M字符的宽度,
padding-right:1em;
padding-top:0.4em; //距离顶部0.4个汉字的宽度
padding-bottom:0.4em;
}
/***********************************/
QLabel
{
font-size:12px;
padding-left:6px;
padding-right:6px;
padding-top:3px;
padding-botton:3px;
}
/***********************************/
QLabel
{
font-size:12px;
padding-left:1em;
padding-right:1em;
padding-top:0.4ex;
padding-bottom:0.4ex;
}