【发布时间】:2016-02-03 21:28:04
【问题描述】:
我有一个具有某种日志查看器的应用程序,它需要能够呈现实时插入其中的格式化日志记录。
我在 Qt 中编写此代码,到目前为止,我使用 QTextEdit 来呈现文本,使用一些 html 标记对其进行美化,然后使用 setHtml 或 insertHtml 插入。
但问题是,这些函数非常耗费 CPU,并且运行时间很长,导致整个应用程序挂起。
这里提出了类似的问题:QTextEdit.insertHtml() is very slow
除了说它真的很慢之外,它没有真正有用的答案,它实际上问的是不同的事情。我不需要加速setHtml 或insertHtml。如果可能,我愿意使用完全不同的技术。
Qt 中是否有任何机制可以真正快速地插入文本?或者甚至可能与QTextEdit 完全不同的组件?
有什么方法可以在QTextEdit 中添加新行,其中包含非常快的富文本(以任何方式生成)?
我也注意到QTextBrowser,但它似乎只是 TextEdit 的扩展,会不会更快?
【问题讨论】:
-
您是否尝试过将
QPlainTextEdit与QSyntaxHighlighter结合使用?没有尝试过 - 只是在寻找解决方案时偶然发现它(另请参阅:stackoverflow.com/a/17466240/4181011) -
append 被调用的频率是多少?如果它比屏幕渲染更快(比如说每秒 60 帧),你最好缓冲数据并使用缓冲区调用 append,速度较慢。
-
每秒大约 1 行,这已经足够用包含超过 500 行的 textedit 挂起 intel i5。 ( setHtml() 调用大约需要 8 秒,每 1 秒调用一次,如果我使用
insertHtml()代替,我需要调用toPlainText()以便我可以看到文本有多少符号才能附加到末尾文档,这个函数也需要大约 8 秒,所以它是一样的。