我有一个具有某种日志查看器的应用程序,它需要能够呈现实时插入的格式化日志记录。
我在Qt写这篇文章,到目前为止,我使用QTextEdit
来渲染文本,使用一些html标签进行了美化,然后插入了setHtml
或insertHtml
。
然而问题是,这些功能非常耗费CPU并且可以运行很长时间,因此会挂起整个应用程序。
此处提出了类似的问题:bash - What is the best way to count find-results?
除了声明它真的很慢之外,它没有真正有用的答案,它实际上是一个不同的东西。我不需要加快setHtml
或insertHtml
。如果可能的话,我愿意使用完全不同的技术。
Qt中是否有任何可以快速插入文本的机制?或者甚至可能与QTextEdit
完全不同的组件?
有没有办法将新行附加到QTextEdit
,其中包含非常快的富文本(以任何方式生成)?
我也注意到QTextBrowser
但它似乎只是TextEdit的扩展,它可能更快吗?
答案 0 :(得分:2)
您应该尝试QPlainTextEdit
。它使用与QTextEdit
相同的技术,但速度要快得多。它针对纯文本处理进行了优化,但是不要让它愚弄你,它仍然对使用HTML进行格式化有一些基本的支持。您可以使用appendHtml()
附加HTML格式的文本。
答案 1 :(得分:0)
在我的应用程序中,我还需要显示一个大型日志的任务,大约3500行。日志的某些行应该是彩色的。为此,我使用了HTML格式。 QTextEdit.setHtml
有这么多文字,冻结了我的GUI。
我将QTextEdit
替换为QListWidget
,其中为日志的每一行创建了QListWidgetItem
。
开始工作得更快,没有带状装饰。
我保存了彩色文字,只需使用QListWidgetItem.setForeground
即可。
答案 2 :(得分:0)
[此信息] [1]
[1]:Performantly appending (rich) text to QTextEdit or QTextBrowser in Qt包含此问题的答案。要点:直接添加基础文档,而不是简单地添加HTML代码段。
但是,我建议,如果您的显示内容确实是单行列表,则可以创建QAbstractListModel QAbstractTableModel派生类,并在项目视图中显示它。