【发布时间】:2011-06-23 18:34:38
【问题描述】:
如果 QPlainTextEdit 或 QTextEdit 区域发生变化,如何编程滚动条跳转到底部/顶部? 好像没有控制功能。
【问题讨论】:
-
我们有两种不同的解释!你的意思是改变文本,还是改变几何?
标签: qt scrollbar position qtextedit
如果 QPlainTextEdit 或 QTextEdit 区域发生变化,如何编程滚动条跳转到底部/顶部? 好像没有控制功能。
【问题讨论】:
标签: qt scrollbar position qtextedit
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)
【讨论】:
在这里,我发布了我的 解决方案,如上述解决方案在我的情况下的工作。
我想获取QTextbrowser开头的光标。
通过使用QTextEdit::setTextCursor,您可以将可见光标移动到您想要的位置:
// Go to beginning
QTextCursor textCursor = ui->textBrowser->textCursor();
textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1);
ui->textBrowser->setTextCursor(textCursor);
希望,这将有助于某些人并节省他们宝贵的时间。
【讨论】:
我正在使用 QTextEdit,而 textEdit.verticalScrollBar().setValue(0) 对我不起作用。
就我而言,textEdit.moveCursor(QTextCursor.Start) 可以滚动到顶部。
【讨论】: