私は、Apple Retina DisplayのPyQt5アプリケーションへのサポートを追加しています。私は成功した(すべての私の.png
ファイルに 2倍@サフィックスを追加すると、私のQApplication
でQt.AA_UseHighDpiPixmaps
を設定することにより)、高解像度のアイコンをレンダリングするために管理している間、私はQGraphicsScene
+ QGraphicsView
に高解像度QGraphicsItem
をレンダリングする際に、いくつかのトラブルを抱えています。私のアプリケーションでApple Retina DisplayのQGraphicsItemレンダリング
、他の.png
ファイルをロードするよりも、私はまた、いくつかのQPixmap
私の自己ユーザーがQGraphicsView
にレンダリング図に新しい図形を追加するために使用できるシンボルのパレットを構築するために、(Icon
にそれらを埋め込む)を生成しますすなわち、:
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
私のパレット(ダイヤモンドワン)のシンボルの1つを生成します。
私は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)
を形状内のテキストが正しくレンダリングされ、私はQGraphicsItem
を親として持つQGraphicsTextItem
ですから、私はそれを自分で描いていません。
問題は、QPixmap
のデバイスのピクセル比率を設定できますが、QGraphicsItem
ではできません。何か不足していますか?
私は既にQt 5.5.1とSIP 4.18(PyQt開発者に報告したアプリケーションの起動時にいくつかのクラッシュが発生しているので5.6を使用していない)に対してビルドされたPyQt 5.5.1を使用しています。
Qt 5.5/5.6でハイDPIサポートに関するニュースを探していましたが、私はブログ記事を見逃してしまったと思います。私はPyQt 5.6での修正を待たなければならないと思う。 –
あなたの答えが私の問題を解決しないにもかかわらず(Qtの最新バージョンにアップグレードせずに解決できないと思われるので)、私はあなたに努力の恩恵を与えます。 –