Предложение Roku использовать QGraphicsView является хорошим, но в случае, если вам нужна сложная отрисовка текста, вы можете не захотеть использовать QGraphicsView.
Другой способ сделать это - использовать QTextDocument возможности рендеринга (а-ля QAbstractTextDocumentLayout ) для рисования интересующей области текста.Прокрутка - это просто вопрос вызова update () для рендеринга новой части текстовой области.
Вот немного Python (PyQt), представляющий часть рисования того, что вам нужно сделать:
# stored within your widget
doc = QTextDocument(self)
doc.setHtml(yourText) # set your text
doc.setTextWidth(self.width()) # as wide as your current widget
ctx = QAbstractTextDocumentLayout.PaintContext()
dl = doc.documentLayout()
# and within your paint event
painter.save()
# you're probably going to draw over the entire widget, but if not
# painter.translate(areaInWhichToDrawRect);
painter.setClipRect(areaInWhichToDrawRect.translated(-areaInWhichToDrawRect.topLeft()))
# by changing the drawing area for each update you emulate scrolling
ctx.clip = theNextAreaToDraw()
dl.draw(painter, ctx)
painter.restore()