QTextEdit.insertHtml() 很慢
Posted
技术标签:
【中文标题】QTextEdit.insertHtml() 很慢【英文标题】:QTextEdit.insertHtml() is very slow 【发布时间】:2011-03-08 09:48:44 【问题描述】:我已经放弃了让它跑得更快的实际尝试。
我最大的问题是,当我插入 html 时,应用程序会变慢到爬行。 我有一个进度条,我正在调用
QCoreApplication.processEvents()
(顺便说一下,我正在使用 pyqt)
我可以将 insertHtml() 放到不同的线程中,这样我就没有无响应的界面吗? 我该怎么做呢?我研究了 QThread 和 QThreadPool,但我不太确定从哪里开始。
【问题讨论】:
我告诉你一个秘密。 QPlainTextEdit::setText() 也很慢。 QPlainTextEdit 没有 setText() 函数。也许你的意思是 QTextEdit::setText()?应该避免使用该函数,因为在每次调用时,它都会尝试通过调查文本中的字符来确定要插入的文本是 HTML 还是纯文本。而是使用 setHtml() 或 setPlainText()。除非您使用复杂的 HTML,否则请查看支持基本 HTML 并且比 QTextEdit 快得多的 QPlainText。 【参考方案1】:我也遇到了这个问题,为了加快速度,我做了一些事情:
TxtBrows->setAcceptRichText(false);
TxtBrows->setContextMenuPolicy(Qt::NoContextMenu);
TxtBrows->setOpenLinks(false);
TxtBrows->setReadOnly(true);
TxtBrows->setUndoRedoEnabled(false);
这应该可以消除不必要的开销。
此外,当插入大量文本时,最好关闭屏幕更新:
setUpdatesEnabled(false);
TxtBrows->append(SomeBigHTMLString);
setUpdatesEnabled(true);
这是在 Qt 文档的某处推荐的,但我现在找不到该位置。
[编辑] 我偶然发现了文档中的位置(正好赶上它们被 QT5 grinn 过时)http://qt-project.org/doc/qt-4.8/qwidget.html#updatesEnabled-prop
【讨论】:
【参考方案2】:在 GUI 应用程序中,主线程 也称为 GUI 线程,因为 这是唯一允许的线程 执行与 GUI 相关的操作。 -- 来自Qt Docs
所以,不。不幸的是,您不能在线程中执行该操作。
编辑:从技术上讲,这是可能的。我刚刚写了一个简短的 sn-p,但是以这种方式使用 Qt GUI 对象是非常不安全的。
【讨论】:
以上是关于QTextEdit.insertHtml() 很慢的主要内容,如果未能解决你的问题,请参考以下文章