Как сделать автопрокрутку текстового поля в Qt? - PullRequest
0 голосов
/ 24 августа 2010

В одном из моих проектов я хотел бы иметь текстовое поле с автоматической прокруткой.

Я не говорю о текстовом поле, которое прокручивается всякий раз, когда кто-то добавляет текстовую строку, но о чем-то, что похоже наmovie "закрывающие титры" последовательность.

Текстовое поле будет заполнено текстом и будет медленно прокручиваться вниз без каких-либо действий пользователя.

Есть ли существующий виджет, который бы подходилэто цель?Если нет, то каким будет лучший способ добиться этого?

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Подход GraphicsView является наиболее гибким, на мой взгляд, если вам нужно что-то необычное.

Более простым подходом может быть использование "Animation Framework", настройка QPropertyAnimation и подключение его к значению "msgstr "свойство вертикальной полосы прокрутки QTextBrowser.(Посмотрите примеры Animation Framework).

1 голос
/ 24 августа 2010

Предложение 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()
1 голос
/ 24 августа 2010

Используйте QGraphicsView, QGraphicsScene и QGraphicsTextItem. С QGraphicsTextItem вы можете использовать HTML для удобного форматирования прокручиваемого текста. Затем запустите таймер для перемещения QGraphicsTextItem.

...