【发布时间】:2018-07-10 13:43:39
【问题描述】:
我正在编写一个简单的文本编辑器客户端,它以块的形式接收给定文件,而不是一次全部读取。例如,如果我有一个 10,000 行的文件,当我在客户端打开它时,我只会得到前 25 行 + 一些废话。当我向下滚动文件时,它会动态加载进入视图的行。
当我在文件中滚动时,我可以动态插入文件内容。但是,我希望 QScrollBar 在打开文件时反映文件的完整大小,而不仅仅是 QTextDocument 的当前内容。
这里是截图形式:
当文件最初加载时仅包含第一行的 QTextEdit 和 QScrollBar。
同样的事情,一旦我滚动到文件的底部并加载了其余部分。
注意较小的QScrollBar 滑块。
我想知道是否有某种方法可以预设底层画布的大小,即很容易以像素为单位计算整个文档的高度,然后使 QTextEdit 滚动区域达到该大小。最好不必求助于绘画。也欢迎任何其他想法。
【问题讨论】:
-
你不能动态地用空行填充要显示的内容,以便与文件具有相同的行数吗?
-
@coolparadox 我曾想过这样做,但在最坏的情况下我会缓存很多空行。它可以进行优化,但重点是让后端处理实际文件,并且只处理当前可见的块。
-
你需要
QTextEdit吗?如果它是一个没有格式化的文件,那么它就是不适合这项工作的工具。你可以自己写一个。 -
它最终应该是一个文本编辑器,所以 QTextEdit 有很多很好的功能。不过,我现在正在考虑在 QScrollArea 上绘画...