我已经放弃了实际尝试让它变得更快。QTextEdit.insertHtml()很慢
我最大的问题是,当我插入html时,应用程序变慢了。 我有一个进度条,和我打电话
QCoreApplication.processEvents()
(我使用PyQt的,顺便说一句)
我可以把insertHtml()到一个不同的线程,所以我没有无响应的界面? 我会怎么做呢?我研究过QThread和QThreadPool,我不太确定从哪里开始。
我已经放弃了实际尝试让它变得更快。QTextEdit.insertHtml()很慢
我最大的问题是,当我插入html时,应用程序变慢了。 我有一个进度条,和我打电话
QCoreApplication.processEvents()
(我使用PyQt的,顺便说一句)
我可以把insertHtml()到一个不同的线程,所以我没有无响应的界面? 我会怎么做呢?我研究过QThread和QThreadPool,我不太确定从哪里开始。
GUI应用程序中,主线程 也被称为GUI线程,因为 它是被允许 执行GUI相关的操作的唯一线索。 - 来自Qt Docs
所以,没有。不幸的是,你不能在一个线程中执行该操作。
编辑:从技术上讲,这是可能的。我刚刚写了一个简短的代码片段,但是以这种方式使用Qt GUI对象非常不安全。
我有这个问题为好,这里有几件事情我做,使其更快:
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
我告诉你一个秘密。 QPlainTextEdit :: setText()同样很慢。 – 2012-06-15 02:45:54
QPlainTextEdit没有setText()函数。也许你的意思是QTextEdit :: setText()?应该避免使用该函数,因为每次调用时都会通过调查文本中的字符来确定要插入的文本是HTML还是纯文本。而是使用setHtml()或setPlainText()。除非你使用复杂的HTML,否则看看支持基本HTML的QPlainText,并且比QTextEdit快很多。 – 2015-11-04 19:26:07