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() 很慢的主要内容,如果未能解决你的问题,请参考以下文章

selenium 脚本驱动chrome浏览器很慢

为啥加载图片很慢?

我centOS上的MySQL速度很慢

mac 电脑启动项目很慢,本地服务调用很慢的解决办法!!

为啥使用VBA后,EXCEL响应变得很慢

网页打开很慢的原因是啥?