15

如果 QPlainTextEdit 或 QTextEdit 区域发生变化,如何编程滚动条以跳转到底部/顶部?看起来它没有任何控制功能。

4

6 回答 6

31

QTextEdit 和 QPlainTextEdit 都继承自 QAbstractScrollArea。QAbstractScrollArea 对象通过verticalScrollBar() 方法提供对滚动条的访问。

因此,要跳到顶部:

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

并跳到底部:

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

这应该适用于 QTextEdit 和 QPlainTextEdit。

于 2012-11-23T10:52:12.417 回答
11

您可以使用“ensureCursorVisible”方法:

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

不过,这不是一个插槽,因此您不能将它连接到任何信号 - 您必须自己创建一些可以连接到 void textChanged() 信号的东西。

免责声明:我可能误解了你的问题——我假设你想在文本中附加一些文本时向下滚动。

于 2011-02-08T22:37:42.527 回答
8

当一个文本编辑控件被调整大小时,QWidget::resizeEvent被调用。你只需要在你的子类中重写这个函数,然后调用verticalScrollBar -> setValue (verticalScrollBar -> minimum())(或maximum())。

于 2011-02-08T22:35:22.170 回答
2

我在 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)
于 2017-12-19T02:47:03.990 回答
1

我正在使用 QTextEdit,textEdit.verticalScrollBar().setValue(0)但对我不起作用。

就我而言,textEdit.moveCursor(QTextCursor.Start)可以滚动到顶部。

于 2021-05-26T06:58:41.050 回答
1

在这里,我将我的解决方案发布为上述解决方案在我的情况下工作。

我想在QTextbrowser.

通过使用QTextEdit::setTextCursor,您可以将可见光标移动到您想要的位置:

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

希望,这将有助于某人并节省他们宝贵的时间。

于 2017-08-17T12:13:13.670 回答