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 - 在大文本缓冲区中滚动的主要内容,如果未能解决你的问题,请参考以下文章

Qt 4.6.3 中 QGLWidget 上的 3D 文本

在 ncurses 中实现文本滚动的推荐方法是啥?

旋转后获取 iPad 屏幕键盘的大小

如何在 Qt 中使用顶点缓冲区对象渲染地形?

如何在带有 Qt 的 OpenGL 中使用顶点缓冲区对象绘制矩形?

Linux 和剪贴板