首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPlainTextEdit显示慢性能

QPlainTextEdit显示慢性能
EN

Stack Overflow用户
提问于 2020-07-28 05:47:56
回答 2查看 535关注 0票数 5

我在Qt中创建了一个特殊的文件查看器工具,用于在1-30 MBytes左右显示文本数据。

我在只读模式下使用QPlainTextEdit并禁用了单词包装来显示文本。

我有一个20 20MByte示例文件,QPlainTextEdit::setPlainText()的调用大约需要6.5秒,这是我无法接受的,我很想经常使用这个工具。

用Notepad++或Total指挥官的Lister打开相同的文件需要一段不可察觉的时间(远远少于一秒钟)。

你知道我该怎么解决这个问题吗?

这个编辑器类型能改进它吗?

还有其他文本查看器类可以更快地完成吗?

是否可以创建自己的文本查看器类以提高性能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 08:02:40

我不知道我的答案会有多大帮助(大部分是基于个人经验)。

这个编辑器类型能改进它吗?

您不能提高setPlainText()的性能,但是您可以尝试改进突出显示机制,从而提高性能。

QPlainTextEdit::setPlainText()是一个简单的界面,可以在编辑器中设置纯文本,但在幕后,它会执行其他一些操作,比如语法突出显示,这会明显降低性能,因为文件中的每个文本块都会调用highlightBlock()。因此,如果文本文件中有100万行,就会有100万次对highlightBlock()的调用。这会影响性能,而且没有办法“轻松”地绕过这一问题。

我见过的大多数编辑器都使用正则表达式来解析当前文本块,然后突出显示它。提高性能的第一步可以是用手动解析替换正则表达式。我已经尝试过多次,它总是能带来更好的性能。

另一种非常少见的方法是使用多线程来突出显示。您可以获取文件中的所有文本,并将其发送给“荧光工作者”,并让它在后台进行高亮显示。您可以在实际的这里这里中看到这一点。

还有其他文本查看器类可以更快地完成吗?

您可以尝试Scintilla,这是Notepad++所使用的。它可以与Qt C++集成,并且工作得很好。有几个Qt应用程序正在使用它,其中一个例子是文字龙

是否可以创建自己的文本查看器类以提高性能?

是的,但那将是一项艰巨的任务。请阅读上面@Vasilij的回答

票数 2
EN

Stack Overflow用户

发布于 2020-07-28 06:04:55

QPlainTextEdit是慢的。它的目的是显示不太大的文本块,不超过100万行非常粗略,甚至更少取决于你的平台。

已知的解是基于模型的。使用快速C++模型和类似于QListView (或QML ListView)的东西,只显示可见的行。每次收到来自滑块、车轮、键盘的事件时,请更新视图。就像QTableView一样。或者,如果需要颜色和一些特殊的格式,比如行号或图标,也可以使用QPainter手动绘制视图。

很容易创建一个简单的只读日志视图,比如小部件。创建编辑器是一项艰巨的任务,因为您必须处理选择、删除、复制粘贴和其他不是手动处理的问题。

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

https://stackoverflow.com/questions/63127788

复制
相关文章

相似问题

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