c++ - Qt - 滚动浏览大文本缓冲区

标签 c++ qt text qt4 scroll

我有一个巨大的文本缓冲区,其中每一行都是通过一个库生成的,我希望我的 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/

相关文章:

python - 将带有子元素的整个 QGraphicSscene 保存到文件中

c++ - 使用 Wayland 在 Linux 上获取 Capslock 状态

C - 链接字符并将其放入变量中

c++ - 为什么在没有参数的方法中使用const?

c++ - 在 C/C++ 中读/写半字节(没有位域)

c++ - 错误 : Storage class specifiers invalid for parameter declarations

css - 如何使用 bootstrap 3.3 在背景图像上书写?

c++ - 基本的 C++ 类如何用 Objective C 实现

qt - 检查 QImage 是否有 alpha channel

android - 如何根据加载的文本增加我的 android textview 中的文本大小?