2010-06-25 65 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