Артефакты при использовании QPainter с QScrollArea - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь использовать QPainter, чтобы нарисовать что-то в QScrollArea.

Хотя мне это удается, при прокрутке вверх или вниз рисунок искажается артефактами:

enter image description here

Ниже приведена минимальная воспроизводимость пример:

from PyQt5 import QtWidgets, QtGui, QtCore

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setFixedHeight(200)
        self.setFixedWidth(200)

        w = QtWidgets.QWidget()
        layout = QtWidgets.QVBoxLayout()
        w.setLayout(layout)
        self.setCentralWidget(w)

        scroll = QtWidgets.QScrollArea()
        layout.addWidget(scroll)

        scrollLayout = QtWidgets.QVBoxLayout()
        scrollW = QtWidgets.QWidget()

        scrollW.setLayout(scrollLayout)
        scrollLayout.setAlignment(QtCore.Qt.AlignTop)

        scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        scroll.setWidgetResizable(True)
        scroll.setWidget(scrollW)

        label = QtWidgets.QLabel()
        canvas = QtGui.QPixmap(400, 300)
        label.setPixmap(canvas)
        scrollLayout.addWidget(label)

        def paintEvent():
            painter = QtGui.QPainter(label.pixmap())
            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            painter.setPen(QtCore.Qt.red)
            painter.setBrush(QtCore.Qt.white)
            painter.drawArc(0, 0, 100, 100, 1440, -2880)
            painter.end()

        paintEvent()

        self.show()

app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 30 апреля 2020

Эту проблему можно решить, сделав область QPixmap прозрачной:

canvas.fill(QtCore.Qt.transparent)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...