2015-11-03 83 views
1

我有一個具有某種日誌查看器的應用程序,它需要能夠呈現格式化的日誌記錄,並將其實時插入到日誌記錄中。如何快速追加到QTextEdit

我正在使用Qt寫這個,到目前爲止我使用QTextEdit來渲染文本,使用一些html標記進行了美化,之後插入了setHtmlinsertHtml

然而,問題是,這些功能是瘋狂的CPU密集型和運行的年齡,懸掛整個應用程序。

類似的問題在這裏問:QTextEdit.insertHtml() is very slow

除了它沒有真正有用的答案,不是說明它很慢,它實際上提出了一個不同的東西以外。我不需要加快setHtmlinsertHtml。如果可能,我願意使用完全不同的技術。

Qt中是否有任何機制能夠真正快速插入文本?或者甚至可能完全不同於QTextEdit的組件?

是否有任何方法可以添加新行到QTextEdit其中包含真正快速的富文本(以任何方式生成)?

我也注意到QTextBrowser但它似乎只是TextEdit的擴展,可能會更快嗎?

+0

您是否嘗試過將'QPlainTextEdit'與'QSyntaxHighlighter'結合使用?還沒有嘗試過 - 在搜索解決方案時偶然發現了它(另請參閱:http://stackoverflow.com/a/17466240/4181011) –

+0

在什麼頻率下追加被調用?如果它比屏幕渲染速度快(比如說每秒60幀),那麼緩衝數據並用緩衝區調用追加緩存效果會更好。 – TheDarkKnight

+0

這是約每秒1行,這已經足以掛起intel5與textedit containsng超過500行。 (setHtml()調用大約需要8秒鐘,並且每隔1秒調用一次,如果我使用insertHtml()代替,我需要調用'toPlainText()'以便我可以看到文本有多少個符號追加到文檔結尾,並且該函數也需要大約8秒,所以它是相同的。 – Petr

回答

2

您應該試一試QPlainTextEdit。它使用與QTextEdit相同的技術,但速度要快很多。它針對純文本處理進行了優化,但不要讓它愚弄你,它仍然有一些使用HTML進行格式化的基本支持。您可以附加HTML格式的文本appendHtml()

+2

Qt永遠不會因爲他們的控件的愚蠢命名而讓我感到意外:) – Petr

+0

另一個非顯而易見的特性:這個東西也處理自動滾動本身,這很好 – Petr

+0

是的,在這種情況下,QPlainTextEdit這個名字是完全誤導性的。 –

0

在我的應用程序中,我還需要顯示大約3500行的大日誌任務。日誌的一些行應該是彩色的。爲此,我使用了HTML格式。用這個數量的文本,我的GUI凍結了。

我將QTextEdit替換爲QListWidget,其中QListWidgetItem是爲日誌的每一行創建的。

它開始工作得更快,沒有頭飾。

我保存了彩色文本,只需使用QListWidgetItem.setForeground即可。

+0

什麼是'setFreground'? – eyllanesc

+0

'QListWidgetItem.setForeground'當然。謝謝! –