我試圖創建一個輸入框,在用戶寫下文本時高亮顯示。
patients = ["AB"/span>, "GH"/span>, "JS"/span>, "LP"/span>]
屬性 = ["medication", "weight", "mobile"]
commands = ["get" , "add", "replace", "delete"]
我希望它能以不同的方式對每種型別的詞進行格式化,例如:
AB add medication aspirin' -> 'AB add MEDICATION "asspirin"'
JS獲得藥物治療 -> JS 獲得 MEDICATION
這可能嗎?我并不是一定要找能夠實作它的代碼,我只是想在我認真花時間去做這件事之前知道它是否可行。
uj5u.com熱心網友回復:
是的,這是可能的,但只適用于基于 QTextDocument 的輸入部件,例如 QPlainTextEdit 或 QTextEdit,因為基本的單行部件 QLineEdit 不支持格式化。
你需要創建一個QSyntaxHighlighter的子類,并覆寫其code>highlightBlock()函式,然后回圈瀏覽所有組,創建一個有效的regex并提供相對格式:
def highlightBlock(self, text)。
fmt = QtGui.QTextCharFormat()
fmt.setFontWeight(QtGui.QFont.Bold)
patientList = '|'.join('({})'.format(v) forv in patients)
patientRegEx = QtCore.QRegularExpression(
r'({})'.format(patientList)
)
rxIter = QtCore.QRegularExpressionMatchIterator(
病人RegEx.globalMatch(text))
while rxIter.hasNext()。
match = rxIter.next()
self.setFormat(
match.capturedStart(),
match.capturedLength(),
fmt)
然后在檔案中為文本編輯設定熒光筆:
self.inputField = QTextEdit()
self.highlighter = MySyntaxHighlighter(self.inputField.document() )
注意,在語法高亮器中似乎有一個已知的、尚未解決的bug,所以設定字體大寫將不會起作用。
不幸的是,對此沒有簡單的解決方法,因此您需要找到其他方法來突出顯示屬性。
要了解字符格式的可用選項,請參閱QTextCharFormat的檔案,以及QTextFormat(它從其中繼承),它還提供有用的函式,如setBackground和setForeground。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329561.html
標籤:
上一篇:Terraform匯入地圖資源
