首页 > 解决方案 > QTextEdit“预分配”画布大小

问题描述

我正在编写一个简单的文本编辑器客户端,它以块的形式接收给定的文件,而不是一次全部读取。例如,如果我有一个 10,000 行的文件,当我在客户端打开它时,我只会得到前 25 行 + 一些 slop。当我向下滚动文件时,它将动态加载进入视图的行。

当我滚动文件时,我可以动态插入文件内容。但是,我希望 QScrollBar 在打开文件时反映文件的完整大小,而不仅仅是 QTextDocument 的当前内容。

这是屏幕截图的形式:

QTextEdit 和 QScrollBar 最初加载文件时仅包含第一块行。

同样的事情,一旦我滚动到文件的底部并且它的其余部分已经加载。

注意较小的QScrollBar滑块。

我想知道是否有某种方法可以预设底层画布的大小,即很容易以像素为单位计算整个文档的高度,然后使 QTextEdit 滚动区域具有该大小。最好不必求助于绘画。也欢迎任何其他想法。

标签: c++qtqtextedit

解决方案


您需要从以编程方式设置垂直滚动条的范围开始:

textEdit->verticalScrollBar()->setMaximum(numberOfLines);

有关更多详细信息,请参阅文档:QAbstractSlider::setMaximum()

此外,您可能需要在QAbstractSlider::sliderMoved(int)发出信号时实现自定义行为。这个想法是你的画布保持小,它只提供一个完整文本的小窗口。


推荐阅读