gpt4 book ai didi

qt - Apple Retina Display 上的 QGraphicsItem 渲染

转载 作者:行者123 更新时间:2023-12-03 18:03:10 24 4
gpt4 key购买 nike

我正在向我的 PyQt5 应用程序添加对 Apple Retina Display 的支持。虽然我成功地渲染了高分辨率图标(通过将 @2x 后缀添加到我的所有 .png 文件并在我的 Qt.AA_UseHighDpiPixmaps 中设置 QApplication ),我在渲染时遇到了一些麻烦高分辨率 QGraphicsItemQGraphicsScene + QGraphicsView .

在我的应用程序中,除了加载 .png文件,我也生成了几个 QPixmap我自己(将它们嵌入到 Icon 中),以构建用户可以用来向 QGraphicsView 中呈现的图表添加新形状的符号调色板。 , IE:

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

这会在我的调色板中生成一个符号(菱形的)。

Eddy Palette

但是,当我向 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)

Eddy Diagram

形状中的文本正确呈现,我没有自己绘制它,因为它是 QGraphicsTextItem有我的 QGraphicsItem作为家长。

问题是对于 QPixmap我可以设置设备像素比,为 QGraphicsItem我不能。我错过了什么吗?

我正在使用针对 Qt 5.5.1 和 SIP 4.18 构建的 PyQt 5.5.1(不使用 5.6,因为我在应用程序启动时遇到了几次崩溃,我已经向 PyQt 开发人员报告了这些崩溃)。

最佳答案

可能不是您想听到的,而是 Qt added retina support in 5.6 .

关于qt - Apple Retina Display 上的 QGraphicsItem 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com