如何快速附加到QTextEdit

How to fast append to QTextEdit

本文关键字:QTextEdit 何快速      更新时间:2023-10-16

我有一个具有某种日志查看器的应用程序,该应用程序需要能够呈现实时插入其中的格式化日志记录。

正在用Qt写这个,到目前为止,我正在使用QTextEdit来渲染文本,它使用一些html标签进行了美化,后来插入了setHtmlinsertHtml

然而,问题是,这些功能是疯狂的CPU密集型的,并且运行了很长时间,挂起了整个应用程序。

这里提出了一个类似的问题:QTextEdit.insertHtml(( 非常慢

除此之外,它

没有真正有用的答案,除了说它真的很慢,它实际上问了不同的事情。我不需要加快setHtmlinsertHtml.如果可能的话,我愿意使用完全不同的技术。

Qt中是否有任何机制可以真正快速地插入文本?甚至可能与QTextEdit完全不同的组件?

有没有办法将新行附加到包含富文本(以任何方式生成(的QTextEdit,而且速度非常快?

我也注意到了QTextBrowser但它似乎只是文本编辑的扩展,可以更快吗?

你应该试一试QPlainTextEdit。它使用与QTextEdit相同的技术,但速度要快得多。它针对纯文本处理进行了优化,但不要让它欺骗您,它仍然对使用 HTML 格式化有一些基本支持。您可以使用 appendHtml() 附加 HTML 格式的文本。

在我的应用程序中,我还需要显示任务的大型日志,大约 3500 行。日志的某些行应着色。为此,我使用了 HTML 格式。 QTextEdit.setHtml这么多文本,冻结了我的 GUI。

我用 QListWidget 替换了QTextEdit,其中为日志的每一行创建QListWidgetItem

它开始工作得更快,没有楣带。

我保存了彩色文本,只是通过使用QListWidgetItem.setForeground很简单。

[这篇文章][1]

[1]:在Qt中以高性能方式将(富(文本附加到QTextEdit或QTextBrowser包含此问题的答案。要点:与其简单地附加HTML片段,不如直接操作底层文档。

但是,我建议,如果您的显示确实是单行列表,请创建一个 QAbstractListModel QAbstractTableModel 派生类,并在项目视图中显示它。