Я добавляю поддержку отображения Retina Apple в приложение PyQt5. В то время как я успешно удалось передать иконки высокого разрешения (путем добавления @ 2x суффикс всех моих .png
файлов и установка Qt.AA_UseHighDpiPixmaps
в моем QApplication
), у меня возникают некоторые проблемы в оказании высоких разрешениях QGraphicsItem
в QGraphicsScene
+ QGraphicsView
.QGraphicsItem рендеринга на дисплее Retina Apple
В моем приложении, кроме загрузки .png
файлов, я также генерировать несколько QPixmap
мой сам (вложение их в Icon
), чтобы создать палитру символов, пользователь может использовать для добавления новых фигур на диаграмме оказанной в QGraphicsView
, т. е.
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
которые генерируют один из символов в моей палитре (алмазный).
Однако при добавлении элементов к моему QGraphicsScene
, отображенные в QGraphicsView
они оказываются в низком разрешении:
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)
Текст в форме оказывается правильно, и я не рисую его сам, так как это QGraphicsTextItem
с моим QGraphicsItem
в качестве родителя.
Проблема в том, что в то время как для QPixmap
я могу установить коэффициент пикселя устройства, для QGraphicsItem
я не могу. Я что-то упускаю?
Я использую PyQt 5.5.1, построенную против Qt 5.5.1 и SIP 4.18 (не использую 5.6, так как я испытываю несколько сбоев при запуске приложения, о котором я уже сообщал разработчикам PyQt).
Я предполагаю, что пропустил сообщение в блоге, хотя я искал новости о поддержке высокого DPI в Qt 5.5/5.6. Думаю, мне просто нужно ждать исправления в PyQt 5.6. –
Несмотря на то, что ваш ответ не решает мою проблему (так как это, по-видимому, не разрешимо без обновления до самой новой версии Qt), я дам вам щедрость за усилия. –