簡體   English   中英

QT QSyntaxHighlighter - 什么是setCurrentBlockState角色?

[英]QT QSyntaxHighlighter - what's the setCurrentBlockState role?

也許我只是愚蠢,但我在這里閱讀了qt richtext演示文檔( https://doc.qt.io/archives/qt-4.7/richtext-syntaxhighlighter.html )和這里的setCurrentBlockState文檔( https ://doc.qt.io/archives/qt-4.7/qsyntaxhighlighter.html#setCurrentBlockState )但我仍然無法弄清楚“newState”是什么意思以及如何在“highlightBlock”事件中使用這些函數。

有人可以用簡單的話來啟發我嗎?

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

正如您發布的示例中所提到的, highlightBlock的問題在於它只知道富文本引擎傳遞給它的當前文本塊。 如果您需要了解有關您處理的上一個文本塊的信息,則需要將此信息存儲在某處。 因此,添加了setCurrentBlockState函數,以便您可以存儲有關您正在使用的當前文本塊的一些任意信息,以便稍后調用highlightBlock可以查看先前調用正在執行的操作。 在該示例中,有人提到突出顯示多行C ++注釋需要這樣的功能才能正常工作。

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

希望這能使事情變得清晰。

我想我已經意識到使用setCurrentBlockState()來記住多行突出顯示狀態將不足以防止你有多個多行高亮顯示規則。 假設您有某種文件,其中您有不同類型的多行語句,需要對它們進行不同的着色。 然后,您需要為每個狀態維護當前和之前的狀態。 僅僅讓多線的規則索引(+1)表示當前的突出顯示狀態,然后在調用下一個塊時匹配該索引是不夠的。 在這種情況下,必須維護每條多線規則的狀態信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM