【问题标题】:How to program scrollbar to jump to bottom/top in case of change in QPlainTextEdit or QTextEdit area?如果 QPlainTextEdit 或 QTextEdit 区域发生变化,如何编程滚动条以跳转到底部/顶部?
【发布时间】:2011-06-23 18:34:38
【问题描述】:

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

【问题讨论】:

  • 我们有两种不同的解释!你的意思是改变文本,还是改变几何?

标签: qt scrollbar position qtextedit


【解决方案1】:

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

因此,跳转到顶部:

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

然后跳到底部:

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

这应该适用于 QTextEdit 和 QPlainTextEdit。

【讨论】:

  • 我错过了 TonyK 的回答已经解决了问题。 TonyK 的回答应该被接受。
【解决方案2】:

您可以使用“ensureCursorVisible”方法:

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

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

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

【讨论】:

  • 请注意,这可能会垂直和水平滚动,这可能不是您想要的。
  • 在我的情况下,文本没有完全显示 - 这就是帮助 - 谢谢!
【解决方案3】:

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

【讨论】:

  • 感谢您的回答!我想为一个特殊的服务器开发一个终端客户端程序。有一个复选框,您可以使用它锁定/解锁屏幕。如果它被解锁,那么写入 QPlainTextBox 的已处理传入数据包将自动强制滚动条位于底部(无论光标位置)。您的解决方案似乎很有希望。稍后我会给你一个反馈...谢谢!
【解决方案4】:

我已经在 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)

【讨论】:

    【解决方案5】:

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

    我想获取QTextbrowser开头的光标。

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

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

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 2021-06-26
        • 2017-11-19
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多