Как запрограммировать полосу прокрутки для перехода вниз / вверх в случае изменения области QPlainTextEdit или QTextEdit? - PullRequest
11 голосов
/ 09 февраля 2011

Как запрограммировать полосу прокрутки для перехода вниз / вверх в случае изменения области QPlainTextEdit или QTextEdit? Похоже, что он не имеет никакой управляющей функции.

Ответы [ 5 ]

24 голосов
/ 23 ноября 2012

QTextEdit и QPlainTextEdit оба унаследованы от QAbstractScrollArea. Объект QAbstractScrollArea предоставляет доступ к полосе прокрутки с помощью метода verticalScrollBar ().

Таким образом, чтобы прыгнуть на вершину:

ui.textEdit->verticalScrollBar()->setValue(0);

И прыгнуть на дно:

ui.textEdit->verticalScrollBar()->setValue(ui.textEdit->verticalScrollBar()->maximum());

Это должно работать как для QTextEdit, так и для QPlainTextEdit.

8 голосов
/ 09 февраля 2011

Вы можете использовать метод «ureCursorVisible »:

void QTextEdit::ensureCursorVisible ()
Ensures that the cursor is visible by scrolling the text edit if necessary.

Это не слот, поэтому вы не можете подключить его к какому-либо сигналу - вам придется создать что-то самостоятельно, что вы можете подключить к сигналу void textChanged ().

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

6 голосов
/ 09 февраля 2011

При изменении размера элемента управления для редактирования текста вызывается QWidget::resizeEvent.Вам просто нужно переопределить эту функцию в своем подклассе и вызвать verticalScrollBar -> setValue (verticalScrollBar -> minimum()) (или maximum()).

0 голосов
/ 19 декабря 2017

Я сделал в Pyqt.

self.scrollArea.verticalScrollBar (). RangeChanged.connect (self.change_scroll)

--------

@pyqtSlot(int, int)
def change_scroll(self, min, max):
    print("cambio", min, max)
    self.scrollArea.verticalScrollBar().setSliderPosition(max)
0 голосов
/ 17 августа 2017

Здесь я публикую свое решение , как указано выше. Решение не работает в моем случае.

Я хочу получить курсор в начале QTextbrowser.

Используя QTextEdit :: setTextCursor , вы можете переместить видимый курсор туда, куда хотите:

     // Go to beginning
     QTextCursor textCursor = ui->textBrowser->textCursor();
     textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1);
     ui->textBrowser->setTextCursor(textCursor);

Надеюсь, это кому-нибудь поможет и сэкономит их драгоценное время.

...