2012-07-26 47 views
1

也許我只是愚蠢的,但我已閱讀這裏的qt richtext演示文檔(http://doc.qt.nokia.com/4.7-snapshot/richtext-syntaxhighlighter.html)和setCurrentBlockState文檔(http://doc.qt.nokia.com/4.7-snapshot/qsyntaxhighlighter.html#setCurrentBlockState),但我仍然無法弄清楚「newState」以及這些函數如何在「highlightBlock」中使用的含義,事件。QT QSyntaxHighlighter - setCurrentBlockState角色是什麼?

有人能用簡單的詞語給我啓發嗎?

回答

2

就Qt而言,newState沒有意義;它是一個任意的整數。當您撥打setCurrentBlockState時,QSyntaxHighlighter僅會將newState整數與您在highlightBlock成員函數中使用的當前文本塊相關聯。換句話說,整數是嚴格意義上的用戶值,可以用來表示任何你想要的。

正如您發佈的示例中提到的那樣,highlightBlock的問題在於,它只能真正瞭解富文本引擎已傳入的當前文本塊。如果您需要了解有關您處理的前一個文本塊的信息,則需要在某處存儲此信息。因此,添加了setCurrentBlockState函數,以便您可以存儲有關正在處理的當前文本塊的任意信息,以便稍後調用highlightBlock時可以看到以前的調用正在執行的內容。在這個例子中,有人提到突出顯示多行C++註釋需要像這樣的功能才能正常工作。

所有這一切說,你實際上不必使用setCurrentBlockState。您可以在highlightBlock調用之間實現自己的存儲狀態。但是,setCurrentBlockState提供了一種將整數與文本塊相關聯的有效方法。

希望這可以讓事情變得清晰。

+0

謝謝,我剛剛意識到highlightBlock(..&text)會收到一個整數行..該函數被多次調用,所以setCurrentBlockState(number)設置LINE上的數字。 – 2012-07-26 17:38:13

2

我想我已經認識到使用setCurrentBlockState()來記住多行高亮狀態並不足以應對多行高亮的多條規則。比方說,你有一些文件,你有不同種類的多行語句,並需要以不同的顏色着色。然後,你需要保持每個人的當前和以前的狀態。只是讓多行的規則索引(+1)代表當前的高亮狀態,然後在爲下一個塊調用時匹配該索引是不夠的。在這種情況下,必須維護每條多行規則的狀態信息。