我有一个巨大的文本缓冲区,其中每一行都是通过一个库生成的,我希望我的 QPlainTextEdit 小部件能够使用我的 QScrollBar 以编程方式加载它的一部分。
这是我的想法:
- 使用 push_back 将每一行加载到 vector
中,并存储一个包含总行数的 count 变量 - 使用QScrollBar加载它的值位置+一些其他行来填充编辑框区域
这可能有效,但我发现push'ing _back vector 中的每一行都非常慢,即使我保留空间它的元素。如果我将每一行附加到一个 string ,那会非常快,但是我需要用 '\n' 字符拆分每一行。
我需要一种快速 push_back 或能够快速在巨大的文本缓冲区中获取 n 行的方法
最佳答案
我遇到了类似的问题,您可能正在寻找的是惰性实例化。获取文件中的总行数。由于您的文本框仅显示 n 行,因此当滚动条转到位置 y(第 y 行)时,则仅显示文件中的第 [y, n+y] 行
如果您想要更多的缓冲区,请考虑将数据分解为逻辑页面。 IE。如果您的“页面”大小为 200 行,那么当您通过滚动条转到第 300 行时,您知道要加载第 2 页。
逐行读取文件的时间总是线性的。但是程序变慢将是在内存中保留大量数据的结果。
关于c++ - Qt - 滚动浏览大文本缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662761/