2

我有一个巨大的文本缓冲区,其中每一行都是通过库生成的,我希望我的 QPlainTextEdit 小部件能够使用我的 QScrollBar 以编程方式加载其中的一部分。

这是我的想法:

  • push_back加载向量 <string>中的每一行,并用总行数存储一个计数变量
  • 使用 QScrollBar 加载其值位置 + 一些其他行来填充编辑框区域

这可能有效,但我发现push 'ing _back向量中的每一行都非常慢,即使我为其元素保留空间。如果我将每一行附加到一个相当快的字符串,但是我需要用 '\n' 字符分割每一行。

我需要一种快速 push_back 或能够在巨大的文本缓冲区中快速获取 n 行的方法

4

1 回答 1

0

我遇到了类似的问题,您可能正在寻找的是惰性实例化。获取文件中的总行数。由于您的文本框仅显示 n 行,因此当滚动条转到位置 y(行 y)时,仅显示文件中的行 [y, n+y]

如果您想要更多的缓冲区,请考虑将数据分解为逻辑页面。即,如果您的“页面”大小为 200 行,那么当您通过滚动条转到第 300 行时,您知道要加载第 2 页。

逐行读取文件总是线性时间。但是程序速度变慢是由于在内存中保留了大量数据。

于 2013-07-10T05:33:55.437 回答