Aggiungo il supporto per il display Retina Apple alla mia applicazione PyQt5. Mentre sono riuscito con successo a rendere le icone ad alta risoluzione (con l'aggiunta del suffisso @ 2x a tutti i miei file .png
e l'impostazione del Qt.AA_UseHighDpiPixmaps
nel mio QApplication
), sto avendo alcuni problemi di rendering in alte risoluzioni QGraphicsItem
in un QGraphicsScene
+ QGraphicsView
.QGraphicsItem rendering su Apple Retina Display
Nella mia applicazione, altro che caricare .png
file, ho anche generare diversi QPixmap
la mia auto (incorporandoli in una Icon
), per costruire la tavolozza dei simboli l'utente può utilizzare per aggiungere nuove forme per lo schema reso nel QGraphicsView
, ovvero:
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
Che generano uno dei simboli nella mia tavolozza (quella a rombo).
Tuttavia quando ho aggiungere elementi al mio QGraphicsScene
, visualizzati in un QGraphicsView
essi siano resi in bassa risoluzione:
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)
Il testo all'interno della forma è resa in modo corretto, e non lo sto dipingendo da solo perché è un QGraphicsTextItem
con il mio QGraphicsItem
come genitore.
Il problema è che mentre per QPixmap
posso impostare il rapporto pixel del dispositivo, per QGraphicsItem
non posso. Mi sto perdendo qualcosa?
Sto usando PyQt 5.5.1 costruito contro Qt 5.5.1 e SIP 4.18 (non usando 5.6 poiché sto riscontrando diversi arresti anomali all'avvio dell'applicazione che ho già segnalato agli sviluppatori PyQt).
Credo di aver perso il post del blog, anche se ho cercato notizie relative al supporto DPI alto in Qt 5.5/5.6. Immagino di dover aspettare una correzione in PyQt 5.6. –
Anche se la tua risposta non risolve il mio problema (dal momento che non è apparentemente risolvibile senza l'aggiornamento alla versione più recente di Qt) ti darò la taglia per lo sforzo. –