PyQt5: сглаживание не выполняется для маскированного QPushButton - PullRequest
0 голосов
/ 10 октября 2018

Рассмотрим следующий минимальный пример:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


class FooPushButton(QtWidgets.QPushButton):
    def __init__(self):
        super().__init__()

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

        self.setMask(QtGui.QRegion(self.rect(), QtGui.QRegion.Ellipse))

    def paintEvent(self, event: QtGui.QPaintEvent):
        painter = QtGui.QPainter(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)

        pen = QtCore.Qt.NoPen
        brush = QtGui.QBrush(QtCore.Qt.red)

        painter.setPen(pen)
        painter.setBrush(brush)

        painter.drawEllipse(self.rect())

        painter.end()


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

        graphicsScene = QtWidgets.QGraphicsScene()
        graphicsScene.addWidget(FooPushButton())

        graphicsView = QtWidgets.QGraphicsView()
        graphicsView.setScene(graphicsScene)

        self.setCentralWidget(graphicsView)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    mainWindow = MainWindow()
    mainWindow.show()

    sys.exit(app.exec())

Это делает раунд QPushButton в QGraphicsScene. Однако подсказка рендеринга сглаживания не соблюдается.Удаление вызова на setMask снова вызывает сглаживание.Я предполагаю, что это потому, что сглаживание на самом деле не применяется к границе видимой кнопки в результате операции маскирования.

Как обойти это?

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