首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QScintilla对象中的增量加载

QScintilla对象中的增量加载
EN

Stack Overflow用户
提问于 2016-06-10 16:39:45
回答 1查看 89关注 0票数 1

我正在使用QScintilla的一个对象,并且我正在增量地读取QScintilla对象中的文件。

标题myEditor.h

代码语言:javascript
复制
class myScintilla: public QScintilla {
     public readFile();
};

#include  "myEditor.h"
void myEditor::readFile() {

   if (FILE* fp = fopen(ofilename.toLatin1(), "r")) {
    QTextStream ts(fp, QIODevice::ReadOnly);
    int bufferSize =(1024* 1024)/2;
    do {
      QString s = ts.read(bufferSize);
      append(s);
    } while(!ts.atEnd());
}

即使在此更改之后,在读取大文件时仍会存在性能问题。它花了很多时间

1)读取1.5 GB大小的文件需要25秒。(机器内核4,16 GB RAM) 2个10秒大小为512MB的文件(在同一台机器上)

有没有什么方法可以根据滚动条的移动增量地加载QScintilla对象中的文件?

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 20:09:43

我发现你的问题很有趣,所以我代表你用谷歌搜索了一下。在我看来,虽然Scintilla通过Loader interface公开了这个功能,但实际上QScintilla类没有。要实现这一点,您需要做的似乎是使用QScintillaBase类将SCI_CREATELOADER消息发送到Scintilla控件。

编辑:此外,您也不希望在循环中使用append。这将导致各种可怕的事情发生。在使用我上面的建议之前,我建议你在内存中构建一个巨大的QString,然后在最后设置它。最好是预先分配。这可能会更快一点。

最终答案

  1. 您可以从使用SCI_ALLOCATE分配的文档开始,其中字节数是您侦听SCN_UPDATEUI event
  2. 的文件的大小,然后根据用户滚动到的位置加载该数据

<>G216

将上面的代码映射到QScintillaBase作为测试应该很简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37743700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档