Qt - 在大文本缓冲区中滚动
Posted
技术标签:
【中文标题】Qt - 在大文本缓冲区中滚动【英文标题】:Qt - Scrolling through large text buffer 【发布时间】:2013-02-02 14:13:24 【问题描述】:我有一个巨大的文本缓冲区,其中每一行都是通过一个库生成的,我希望我的 QPlainTextEdit 小部件能够使用我的 QScrollBar 以编程方式加载其中的一部分。
这就是我的想法:
使用 push_back 将每一行加载到 vector 中,并使用总行数存储一个 count 变量 使用 QScrollBar 加载其值位置 + 一些其他行来填充编辑框区域这可能有效,但我发现 push_back 向量中的每一行都非常慢,即使我 保留 空间它的元素。如果我将每一行附加到一个相当快的 string 中,但是我需要用 '\n' 字符分割每一行。
我需要一种快速 push_back 或能够在巨大的文本缓冲区中快速获取 n 行的方法
【问题讨论】:
您可以查看内存映射文件。另见***.com/questions/6914147/… 我不确定为什么将字符串附加到向量会非常慢。定义“大”? .text 部分的反汇编,所以很多行 【参考方案1】:我遇到了类似的问题,您可能正在寻找的是惰性实例化。获取文件中的总行数。由于您的文本框仅显示 n 行,因此当滚动条转到位置 y(行 y)时,仅显示文件中的行 [y, n+y]
如果您想要更多的缓冲区,请考虑将数据分解为逻辑页面。 IE。如果您的“页面”大小为 200 行,那么当您通过滚动条转到第 300 行时,您知道要加载第 2 页。
逐行读取文件总是线性时间。但是程序速度变慢是由于在内存中保留了大量数据。
【讨论】:
以上是关于Qt - 在大文本缓冲区中滚动的主要内容,如果未能解决你的问题,请参考以下文章