啟用高分屏適配
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 }