Qt не может нарисовать несколько QRect на виджете - PullRequest
0 голосов
/ 21 октября 2019

У меня есть простой код в PySide2 для рисования нескольких QRects (20 красных QRect) на экране. При выполнении кода он рисует только один (последний) экземпляр этих QRects. Что я делаю не так?

def paintEvent(self, event:QPaintEvent):

    if self.cell != None:
        painter = QPainter(self)
        painter.setPen(Qt.NoPen)
        painter.setBrush(Qt.red)
        painter.drawRect(self.cell)

def drawBoard(self):

    cellWidth =  self.width / self.columns
    cellHeight = self.height / self.rows

    for r in range(0, self.rows):
        for c in range(0, self.columns):

            if (self.grid[r][c]):
                # this gets executed 20 times

                cellx = cellWidth * c
                celly = cellHeight * r
                self.cell = QRect(cellx, celly, cellWidth, cellHeight)

                # paint cell on widget
                self.update()

Как мне вызвать paintEvent для рисования нескольких экземпляров в виджете?

1 Ответ

1 голос
/ 21 октября 2019

Если не указано иное, Qt обычно стирает / заполняет фон QWidget перед вызовом метода paintEvent - поэтому вы видите только последний прямоугольник.

Попробуйте переместить логику рисованияв paintEvent сам (не проверено) ...

def paintEvent(self, event:QPaintEvent):
    if self.cell != None:
        painter = QPainter(self)
        painter.setPen(Qt.NoPen)
        painter.setBrush(Qt.red)
        cellWidth =  self.width / self.columns
        cellHeight = self.height / self.rows
        for r in range(0, self.rows):
            for c in range(0, self.columns):
                if (self.grid[r][c]):
                    # this gets executed 20 times

                    cellx = cellWidth * c
                    celly = cellHeight * r

                    # paint cell on widget
                    painter.drawRect(QRect(cellx, celly, cellWidth, cellHeight))

def drawBoard(self):
    self.update()
...