如何使用QPainter在QScrollArea上绘制线条?

问题描述 投票:0回答:1

我正在尝试使用PyQt5创建数据结构可视化模拟器。里面有一个QWidget和一个QScrollArea。

class test(QWidget):
    def __init__(self):
        super().__init__()  
        ...
        ...
        self.setUI() 

    def setUI(self):
        self.setGeometry(250, 200, 1500, 750)
        self.setWindowTitle('data structure visualization simulator')

        self.topFiller = QWidget()
        self.topFiller.setMinimumSize(1200, 2000)
        self.scroll = QScrollArea()
        self.scroll.setWidget(self.topFiller)

        self.vbox = QVBoxLayout()
        self.vbox.addWidget(self.scroll)
        self.setLayout(self.vbox)

现在我需要在QScrollArea上画线,我应该在QPainter中写什么?

    def paintEvent(self, e):
        qp = QPainter(self)
        pen = QPen()
        pen.setWidth(1)
        qp.setPen(pen)
        qp.drawLine(15, 80, 1080, 120)
python pyqt pyqt5 qpainter qscrollarea
1个回答
0
投票

paintEvent由实际要绘制的窗口小部件接收,即使它是其父窗口,您也不能从另一个窗口小部件实现它;您需要子类化scrollarea并从那里实现paintEvent,或者使用事件过滤器拦截事件。在这两种情况下,画家目标都必须是滚动区域的viewport()

子类:

viewport()

事件过滤:

class MyScrollArea(QScrollArea):
    def paintEvent(self, event):
        qp = QPainter(self.viewport())
        pen = QPen()
        pen.setWidth(1)
        qp.setPen(pen)
        qp.drawLine(15, 80, 1080, 120)
© www.soinside.com 2019 - 2024. All rights reserved.