如果 QPlainTextEdit 或 QTextEdit 区域发生变化,如何编程滚动条以跳转到底部/顶部?看起来它没有任何控制功能。
6 回答
QTextEdit 和 QPlainTextEdit 都继承自 QAbstractScrollArea。QAbstractScrollArea 对象通过verticalScrollBar() 方法提供对滚动条的访问。
因此,要跳到顶部:
ui.textEdit->verticalScrollBar()->setValue(0);
并跳到底部:
ui.textEdit->verticalScrollBar()->setValue(ui.textEdit->verticalScrollBar()->maximum());
这应该适用于 QTextEdit 和 QPlainTextEdit。
您可以使用“ensureCursorVisible”方法:
void QTextEdit::ensureCursorVisible () Ensures that the cursor is visible by scrolling the text edit if necessary.
不过,这不是一个插槽,因此您不能将它连接到任何信号 - 您必须自己创建一些可以连接到 void textChanged() 信号的东西。
免责声明:我可能误解了你的问题——我假设你想在文本中附加一些文本时向下滚动。
当一个文本编辑控件被调整大小时,QWidget::resizeEvent
被调用。你只需要在你的子类中重写这个函数,然后调用verticalScrollBar -> setValue (verticalScrollBar -> minimum())
(或maximum()
)。
我在 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)
我正在使用 QTextEdit,textEdit.verticalScrollBar().setValue(0)
但对我不起作用。
就我而言,textEdit.moveCursor(QTextCursor.Start)
可以滚动到顶部。
在这里,我将我的解决方案发布为上述解决方案在我的情况下工作。
我想在QTextbrowser
.
通过使用QTextEdit::setTextCursor,您可以将可见光标移动到您想要的位置:
// Go to beginning
QTextCursor textCursor = ui->textBrowser->textCursor();
textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1);
ui->textBrowser->setTextCursor(textCursor);
希望,这将有助于某人并节省他们宝贵的时间。