Ich füge Unterstützung für die Apple Retina Display zu meiner PyQt5-Anwendung. Während ich erfolgreich hochauflösende Icons machen verwaltet (durch die @ 2x Suffix an alle meine .png
Dateien hinzufügen und die Qt.AA_UseHighDpiPixmaps
in meinem QApplication
Einstellung), habe ich einige Probleme beim Rendern hohen Auflösungen QGraphicsItem
in einem QGraphicsScene
+ QGraphicsView
.QGraphicsItem Rendering auf Apple Retina Display
In meiner Anwendung, die nicht geladen .png
Dateien, ich erzeuge auch mehrere QPixmap
mich selbst (sie in ein Icon
Einbettung), die Palette von Symbolen bauen der Benutzer neue Formen verwenden kann, um das Diagramm in den QGraphicsView
gemacht hinzufügen , das heißt:
def icon(cls, width, height, **kwargs):
"""
Returns an icon of this item suitable for the palette.
:type width: int
:type height: int
:rtype: QIcon
"""
icon = QIcon()
for i in (1.0, 2.0):
# CREATE THE PIXMAP
pixmap = QPixmap(width * i, height * i)
pixmap.setDevicePixelRatio(i)
pixmap.fill(Qt.transparent)
# PAINT THE SHAPE
polygon = cls.createPolygon(46, 34)
painter = QPainter(pixmap)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine))
painter.setBrush(QColor(252, 252, 252))
painter.translate(width/2, height/2)
painter.drawPolygon(polygon)
# PAINT THE TEXT INSIDE THE SHAPE
painter.setFont(Font('Arial', 11, Font.Light))
painter.drawText(polygon.boundingRect(), Qt.AlignCenter, 'role')
painter.end()
# ADD THE PIXMAP TO THE ICON
icon.addPixmap(pixmap)
return icon
Welche eines der Symbole in meiner Palette (der Diamant eins) zu erzeugen. Jedoch
wenn ich hinzufügen, Elemente meiner QGraphicsScene
, angezeigt in einem QGraphicsView
sie in niedriger Auflösung wiedergegeben werden:
def paint(self, painter, option, widget=None):
"""
Paint the node in the diagram.
:type painter: QPainter
:type option: QStyleOptionGraphicsItem
:type widget: QWidget
"""
painter.setPen(self.pen)
painter.setBrush(self.brush)
painter.drawPolygon(self.polygon)
Der Text in der Form ist korrekt wiedergegeben, und ich male es nicht selbst, da es eine QGraphicsTextItem
hat, die meine QGraphicsItem
als Elternteil hat.
Das Problem ist, dass während ich für QPixmap
das Gerät Pixel-Verhältnis kann, für QGraphicsItem
kann ich nicht. Fehle ich etwas?
Ich benutze PyQt 5.5.1 gebaut gegen Qt 5.5.1 und SIP 4.18 (nicht mit 5.6, da ich mehrere Abstürze beim Start der Anwendung, die ich bereits an PyQt Devs berichtet).
Ich denke, ich habe den Blogpost verpasst, obwohl ich nach Neuigkeiten bezüglich der Unterstützung für hohe DPI in Qt 5.5/5.6 gesucht habe. Ich denke, ich muss nur auf eine Korrektur in PyQt 5.6 warten. –
Obwohl deine Antwort mein Problem nicht löst (da es anscheinend nicht lösbar ist, ohne auf die neueste Version von Qt zu aktualisieren), gebe ich dir das Kopfgeld für die Mühe. –