2013-05-15 118 views
5

QPaintDevice的文件(其中所有上漆到實體從導出,如QWidgetQPixmap,等)中,有兩個功能,以接收所述設備的DPIQt中logicalDpiX和physicalDpiX有什麼區別?

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

int logicalDpiY() const; 
int logicalDpiX() const; 

文檔說

logicalDpiX()和logicalDpiY()函數以每英寸點數的形式返回設備的水平和垂直分辨率。 physicalDpiX()和physicalDpiY()函數也以每英寸點數的形式返回設備的分辨率,但請注意,如果邏輯和物理分辨率不同,則相應的QPaintEngine必須處理映射。最後,colorCount()函數返回可用於繪製設備的不同顏色的數量。

儘管有這個描述,我仍然不明白這個區別的目的是什麼。有人可以澄清這一點嗎?

回答

7

我假設物理是設備的實際分辨率,邏輯是用戶在操作系統首選項中設置的。這在視網膜或其他高分辨率顯示器中非常流行,其中使用像素的物理點會導致一切太小。

我發現這個窗口的具體信息: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 docs

上的邏輯VS每英寸的物理網點的說明:物理DPI是基於 實際的物理像素尺寸可供選擇時,是 打印預覽有用在其他情況下,需要知道屏幕顯示內容的確切尺寸 。使用每英寸 英寸的邏輯點來將字體和用戶界面元素從點數 大小轉換爲像素大小,並且可能與每英寸的物理點 不同。每英寸的邏輯點數有時可由用戶在 桌面環境的設置面板中設置,以讓用戶在不同應用程序中全局控制UI和字體大小。

0

我不是100%確定,但我認爲 物理分辨率 - 是您正在繪製的畫布的實際分辨率。 邏輯分辨率 - 是您在程序中使用的分辨率。例如,要處理不同的屏幕,您可以說對於顯示器(畫布)的任何物理分辨率,我將使用每100像素100的邏輯分辨率,並使用固定佈局。縮放將由畫家自動使用物理分辨率完成

例如,OpenGL以此方式工作。它首先將所有座標(使用模型,視圖,投影矩陣)轉換爲[-1,1]範圍立方體,在這些座標系中執行計算並稍後將其映射到實際顏色緩衝區