9

QPaintDevice(所有可绘制实体都派生自,例如QWidgetQPixmap等)的文档中,有两个函数可以接收设备的 DPI

int logicalDpiX() const;
int physicalDpiX() const;

int logicalDpiY() const;
int physicalDpiY() const;

文件说

logicalDpiX() 和logicalDpiY() 函数返回设备的水平和垂直分辨率,以每英寸点数为单位。physicalDpiX() 和 physicalDpiY() 函数还返回设备的分辨率,单位为每英寸点数,但请注意,如果逻辑分辨率和物理分辨率不同,则相应的 QPaintEngine 必须处理映射。最后,colorCount() 函数返回可用于绘制设备的不同颜色的数量。

尽管有这样的描述,但我仍然不明白差异的目的是什么。有人可以对此有所了解吗?

4

2 回答 2

10

我假设物理是设备的实际分辨率,逻辑是用户在操作系统首选项中设置的。这在视网膜或其他高分辨率显示器中很流行,在这些显示器中,使用物理点作为像素会导致一切都太小。

我找到了这个 Windows 特定信息:http: //msdn.microsoft.com/en-us/library/windows/apps/ff684173

由于实际像素大小不同,在一台显示器上可读的文本在另一台显示器上可能太小。此外,人们有不同的偏好——有些人更喜欢更大的文本。因此,Windows 允许用户更改 DPI 设置。例如,如果用户将显示设置为 144 DPI,则 72 磅字体的高度为 144 像素。标准 DPI 设置为 100% (96 DPI)、125% (120 DPI) 和 150% (144 DPI)。用户还可以应用自定义设置。从 Windows 7 开始,DPI 是每个用户的设置。

更好的是: QT 文档

关于每英寸逻辑点数与物理点数的说明:物理 DPI 基于可用的实际物理像素大小,适用于打印预览和其他需要了解屏幕显示内容的确切物理尺寸的情况。每英寸逻辑点数用于将字体和用户界面元素从点大小转换为像素大小,并且可能与每英寸物理点数不同。每英寸的逻辑点数有时可由用户在桌面环境的设置面板中设置,以让用户在不同的应用程序中全局控制 UI 和字体大小。

于 2013-05-15T09:56:58.953 回答
-1

我不是 100% 确定,但我认为物理分辨率 - 是您正在绘画的画布的实际分辨率。逻辑分辨率 - 是您在程序中使用的分辨率。例如,要处理不同的屏幕,您可能会说对于显示器(画布)的任何物理分辨率,我将使用每 100 像素 100 的逻辑分辨率并使用例如固定布局。重新缩放将由画家使用物理分辨率自动完成

例如,OpenGL 就是这样工作的。它首先将所有坐标(使用模型、视图、投影矩阵)转换为 [-1, 1] 范围立方体,在这些坐标中执行计算,然后将它们映射到实际的颜色缓冲区

于 2013-05-15T10:00:42.633 回答