无论PointSize(点大小)还是像素大小(PixelSize),描述的都是文字在输出设备(显示屏、打印机等)上呈现的大小
首先理解两个概念:DPI(Dots per Inch) 和 PPI(Pixel per Inch)
DPI
:每英寸包含的点个数,单位是磅(point),这最初是用了描述打印机的墨点数量的。不同的设备,DPI不同,如打印机从300到几千DPI,而windows10系统下电脑显示屏为96DPI,它实际上是一个物理单位,只是把英寸按照一定的比例换算成另一个数值
windows中修改显示设置中的缩放,其实就是修改了DPI,100%时DPI=96,150%时DPI=144
PPI
:每英寸包含的像素个数(像素长度/英寸长度),从图形的角度描述,如一个分辨率为1920*1080的27寸屏幕,屏幕比例是16:9,根据勾股定理可以算出PPI=90.8668(更准确的描述应该分成X方向和Y方向的PPI,不过在显示器中可以认为是一样的)
可见,像素大小本身无法描述物理长度,必须给定PPI(即像素跟英寸之间的关系)才行,而点大小本身就是英寸等比例缩放得到的数值,可以直接用于描述物理长度,因此用点大小描述文字大小可以让其在不同设备中呈现一样的大小。
Qt中查看DPI和PPI
QScreen *screen = QGuiApplication::screens()[0];
//PPI
qreal ppiX = screen->physicalDotsPerInchX();
qreal ppiY = screen->physicalDotsPerInchY();
qreal ppi = screen->physicalDotsPerInch();
//DPI
qreal dpiX = screen->logicalDotsPerInchX();
qreal dpiY = screen->logicalDotsPerInchY();
qreal dpi = screen->logicalDotsPerInch();
点大小和像素大小之间的转换
DPI = Npoint / 1 inch
PPI = Npixel / 1 inch
设物理长度M inch对应的像素大小为Mpixel,点大小Mpoint,则有 Mpoint / Mpixel = Npoint / Npixel
已知像素大小Mpixel,对应的点大小 Mpoint = DPI / PPI * Mpixel
已知点大小Mpoint ,对应的像素大小 Mpixel = PPI / DPI * Mpoint