2010-06-25 257 views
2

我已经放弃了实际尝试让它变得更快。QTextEdit.insertHtml()很慢

我最大的问题是,当我插入html时,应用程序变慢了。 我有一个进度条,和我打电话

QCoreApplication.processEvents() 

(我使用PyQt的,顺便说一句)

我可以把insertHtml()到一个不同的线程,所以我没有无响应的界面? 我会怎么做呢?我研究过QThread和QThreadPool,我不太确定从哪里开始。

+2

我告诉你一个秘密。 QPlainTextEdit :: setText()同样很慢。 – 2012-06-15 02:45:54

+0

QPlainTextEdit没有setText()函数。也许你的意思是QTextEdit :: setText()?应该避免使用该函数,因为每次调用时都会通过调查文本中的字符来确定要插入的文本是HTML还是纯文本。而是使用setHtml()或setPlainText()。除非你使用复杂的HTML,否则看看支持基本HTML的QPlainText,并且比QTextEdit快很多。 – 2015-11-04 19:26:07

回答

2

GUI应用程序中,主线程 也被称为GUI线程,因为 它是被允许 执行GUI相关的操作的唯一线索。 - 来自Qt Docs

所以,没有。不幸的是,你不能在一个线程中执行该操作。

编辑:从技术上讲,这是可能的。我刚刚写了一个简短的代码片段,但是以这种方式使用Qt GUI对象非常不安全。

5

我有这个问题为好,这里有几件事情我做,使其更快:

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