在QPaintDevice
的文档中(所有可绘画的实体都来自此文档,例如QPaintDevice
,QWidget
等),有两个函数来接收设备的DPI
QPixmap
文档说
logicalDpiX()和logicalDpiY()函数以每英寸点数返回设备的水平和垂直分辨率。 physicalDpiX()和physicalDpiY()函数还返回以英寸/英寸为单位的设备分辨率,但请注意,如果逻辑分辨率和物理分辨率不同,则相应的QPaintEngine必须处理映射。最后,colorCount()函数返回绘画设备可用的不同颜色的数量。
尽管有此描述,但我仍然不明白区别的目的是什么。有人可以说明一下吗?
我假设物理是设备的实际分辨率,逻辑是用户在os首选项中设置的分辨率。这在视网膜或其他高分辨率显示器中很流行,在这些显示器中,使用物理点作为像素会导致一切都太小。
我发现了此Windows的特定信息:int logicalDpiX() const;
int physicalDpiX() const;
int logicalDpiY() const;
int physicalDpiY() const;
由于实际像素大小不同,一台显示器上可读的文本在另一台显示器上可能太小。而且,人们有不同的偏好设置-有些人喜欢较大的文字。因此,Windows使用户可以更改DPI设置。例如,如果用户将显示设置为144 DPI,72点字体为144像素高。的标准DPI设置为100%(96 DPI),125%(120 DPI)和150%(144DPI)。用户还可以应用自定义设置。从Windows 7开始,DPI是每个用户的设置。
甚至更好:http://msdn.microsoft.com/en-us/library/windows/apps/ff684173:
关于每英寸逻辑点与物理点的说明:物理DPI基于实际的实际像素大小(如果有),对于打印预览和其他需要确切了解的情况屏幕显示内容的物理尺寸。每个逻辑点inch用于转换点的字体和用户界面元素大小到像素大小,并且可能与物理点不同每英寸。每英寸的逻辑点有时可以在桌面环境的设置面板,以使用户可以全局控制不同应用程序中的UI和字体大小。
我不确定100%,但我认为物理分辨率-是您要在其上绘画的画布的实际分辨率。逻辑分辨率-是您在程序中使用的分辨率。例如,要处理不同的屏幕,您可能会说,对于显示器的任何物理分辨率(画布),我将使用每100像素100的逻辑分辨率并使用固定的布局。画家将使用物理分辨率自动重新缩放比例]
例如,OpenGL以这种方式工作。它首先将所有坐标(使用模型,视图,投影矩阵)转换为[-1,1]范围立方体,在这些坐标中执行计算,然后将它们映射到实际的颜色缓冲区