2013-05-15 6 views
5

In der Dokumentation von QPaintDevice (die alle lackierbar-Entitäten aus ableiten, wie QWidget, QPixmap, usw.), gibt es zwei Funktionen, um die DPI des GerätesWas ist der Unterschied zwischen logicalDpiX und physicalDpiX in Qt?

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

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

Die Dokumentation sagt

zu erhalten

Die Funktionen logicalDpiX() und logicalDpiY() geben die horizontale und vertikale Auflösung des Geräts in Punkten pro Zoll zurück. Die Funktionen physicalDpiX() und physicalDpiY() geben auch die Auflösung des Geräts in dots per inch zurück. Beachten Sie jedoch, dass die entsprechende QPaintEngine das Mapping verarbeiten muss, wenn sich die logische und die physikalische Auflösung unterscheiden. Schließlich gibt die Funktion colorCount() die Anzahl der verschiedenen Farben zurück, die für das Malgerät verfügbar sind.

Trotz dieser Beschreibung verstehe ich immer noch nicht, was der Zweck des Unterschieds ist. Kann jemand bitte etwas Licht darauf werfen?

Antwort

7

Ich nehme an, dass physikalische ist die tatsächliche Auflösung des Geräts und logisch ist, was der Benutzer in den OS-Einstellungen festgelegt hat. Dies ist bei Retina oder anderen hochauflösenden Anzeigen beliebt, bei denen die Verwendung der physikalischen Punkte für Pixel dazu führen würde, dass alles zu klein ist.

fand ich dieses Fenster spezifische Informationen: http://msdn.microsoft.com/en-us/library/windows/apps/ff684173

Da die tatsächlichen Pixelgrößen variieren, Text, der auf einem Monitor könnte zu klein sein, auf einem anderen Monitor lesbar ist. Außerdem haben die Leute unterschiedliche Präferenzen - manche bevorzugen größere Texte. Aus diesem Grund ermöglicht es Windows dem Benutzer, die DPI-Einstellung zu ändern. Beispiel: Wenn der Benutzer die Anzeige auf 144 DPI setzt, ist eine 72-Punkt-Schrift 144 Pixel groß. Die Standard-DPI-Einstellungen sind 100% (96 DPI), 125% (120 DPI) und 150% (144 DPI). Der Benutzer kann auch eine benutzerdefinierte Einstellung anwenden. Ab Windows 7 ist DPI eine benutzerspezifische Einstellung.

Noch besser: QT docs:

Ein Hinweis auf logische vs physischen Punkten pro Zoll: physikalische DPI basiert auf die tatsächlichen physikalischen Pixelgrößen, wenn verfügbar, und ist nützlich für die Druckvorschau und andere Fälle, in denen es wünschenswert ist, die genauen physischen Abmessungen des Bildschirm angezeigten Inhalte zu kennen. Logische Punkte pro Zoll werden verwendet, um Schriftart und Benutzeroberflächenelemente von Punkt Größen zu Pixelgrößen zu konvertieren, und können sich von den physischen Punkten pro Zoll unterscheiden. Die logischen Punkte pro Zoll sind manchmal benutzerdefinierbar im Einstellungsfenster der Desktopumgebung , damit der Benutzer die Benutzeroberfläche und Schriftgrößen in verschiedenen Anwendungen global steuern kann.

0

Ich bin nicht 100% sicher, aber ich denke, physikalische Auflösung - ist die tatsächliche Auflösung der Leinwand Sie malen auf. logische Auflösung - ist die Auflösung, die Sie in Ihrem Programm verwenden. Zum Beispiel, um verschiedene Bildschirme zu behandeln, kann man sagen, dass ich für jede physikalische Auflösung des Bildschirms (Canvas) mit einer logischen Auflösung von 100 pro 100 Pixel arbeite und beispielsweise ein festes Layout verwende.Die Neukalibrierung wird vom Maler automatisch unter Verwendung der physikalischen Auflösung durchgeführt.

OpenGL funktioniert auf diese Weise, zum Beispiel. Es transformiert zuerst alle Koordinaten (unter Verwendung von Modell, Ansicht, Projektionsmatrizen) in einen [-1, 1] Bereichswürfel, führt Berechnungen in diesen Koordinaten durch und ordnet sie später dem tatsächlichen Farbpuffer

zu
Verwandte Themen