我正在使用QScintilla的一个对象,并且我正在增量地读取QScintilla对象中的文件。
标题myEditor.h
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对象中的文件?
发布于 2016-06-10 20:09:43
我发现你的问题很有趣,所以我代表你用谷歌搜索了一下。在我看来,虽然Scintilla通过Loader interface公开了这个功能,但实际上QScintilla类没有。要实现这一点,您需要做的似乎是使用QScintillaBase类将SCI_CREATELOADER消息发送到Scintilla控件。
编辑:此外,您也不希望在循环中使用append。这将导致各种可怕的事情发生。在使用我上面的建议之前,我建议你在内存中构建一个巨大的QString,然后在最后设置它。最好是预先分配。这可能会更快一点。
最终答案
SCI_ALLOCATE分配的文档开始,其中字节数是您侦听SCN_UPDATEUI event <>G216
将上面的代码映射到QScintillaBase作为测试应该很简单。
https://stackoverflow.com/questions/37743700
复制相似问题