【问题标题】:Qt - Scrolling through large text bufferQt - 在大文本缓冲区中滚动
【发布时间】:2013-02-02 14:13:24
【问题描述】:

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

这就是我的想法:

  • 使用 push_back 将每一行加载到 vector 中,并使用总行数存储一个 count 变量
  • 使用 QScrollBar 加载其值位置 + 一些其他行来填充编辑框区域

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

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

【问题讨论】:

  • 您可以查看内存映射文件。另见stackoverflow.com/questions/6914147/…
  • 我不确定为什么将字符串附加到向量会非常慢。定义“大”?
  • .text 部分的反汇编,所以很多行

标签: c++ qt text qt4 scroll


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多