我正在尝试使用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)
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)