第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么我的 charFormat 樣式只適用于選擇,而且只適用于特定方向的選擇?

為什么我的 charFormat 樣式只適用于選擇,而且只適用于特定方向的選擇?

紅糖糍粑 2023-05-23 16:03:04
我一直在嘗試更明確地分配文本編輯器的字符格式,以便我可以了解我可以根據(jù)當(dāng)前的技能范圍自定義哪些內(nèi)容。雖然我的格式化方法的基本復(fù)制粘貼版本工作得很好,但下面的版本一直在工作,然后以令人沮喪的方式無(wú)法工作,需要幫助找出可能導(dǎo)致它的原因。該編輯器最初旨在成為通過(guò)文檔標(biāo)簽設(shè)計(jì)樣式的所見即所得編輯器。Qt 對(duì) Html 的混亂使用并沒有讓事情變得如此簡(jiǎn)單。我的基本流程是提取當(dāng)前格式的副本,檢查其當(dāng)前狀態(tài),反轉(zhuǎn)它,然后將格式重新應(yīng)用到從中提取的位置或選擇。# textEdit is a QTextEdit with a loaded document.# This function is one of several related pairs called by a switchboard.# It's intent is to invert the italic state of the current position/selection.def toggle_italic_text(textEdit):    # Get the cursor, and the format's state at its current selection/position.    cursor = textEdit.textCursor()    charFormat = cursor.charFormat()    currentState = charFormat.fontItalic()    # Invert the state within the format.    print(currentState)    charFormat.setFontItalic(not currentState)    print(charFormat.fontItalic())    # Reapply the format to the cursor's current selection/position.    cursor.mergeCharFormat(charFormat)當(dāng)我第一次實(shí)施它時(shí),這很有效?,F(xiàn)在,它只適用于選擇,即便如此,它似乎也會(huì)根據(jù)我選擇的方向來(lái)識(shí)別錯(cuò)誤的狀態(tài)。在試驗(yàn)之后,似乎如果我向右進(jìn)行選擇,它就會(huì)正確反轉(zhuǎn)。如果我在左側(cè)進(jìn)行選擇,則不會(huì)。當(dāng)嘗試將其分配到?jīng)]有選擇的位置時(shí),打印狀態(tài)從 False 變?yōu)?True,這是需要的,但效果在我鍵入時(shí)不適用。如果我就地重復(fù)運(yùn)行它,它會(huì)繼續(xù)從 False 變?yōu)?True,這意味著更改正在丟失。該函數(shù)被一致調(diào)用并完全運(yùn)行。charFormat 副本的存儲(chǔ)狀態(tài)確實(shí)發(fā)生了變化。為什么這種模式停止工作了?我使用的 charFormats 錯(cuò)了嗎?為什么選擇的方向會(huì)改變結(jié)果?就我這邊發(fā)生的變化而言,在需要通過(guò) QFonts、QCharFormats、QPalette 和 CSS 樣式表(以及 doc.defaultStylesheet)同時(shí)針對(duì)小部件和 html 標(biāo)簽來(lái)應(yīng)用樣式之后,我在樣式設(shè)計(jì)工作中迷失了方向。我非常希望通過(guò)一種方法來(lái)控制我的樣式,但無(wú)法弄清楚層次結(jié)構(gòu)或找到一種應(yīng)用足夠廣泛的方法。最后,除了分配給窗口的樣式表之外,我刪除了所有內(nèi)容。如果代碼本身沒有問(wèn)題,我真的希望能得到一些提示,說(shuō)明什么可能會(huì)破壞事情。我花了一段時(shí)間才習(xí)慣這樣的想法,即光標(biāo)和格式是要更改和重新應(yīng)用的副本,而文檔及其塊才是真正的結(jié)構(gòu)。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊

必須考慮的重要事項(xiàng)QTextCursor.charFormat()是:

返回光標(biāo)position?(?)之前字符的格式。

因此,這不僅不能很好地處理包含多種字符格式的選擇,而且您還必須考慮光標(biāo)位置,它可能會(huì)在選擇中發(fā)生變化:它可能在開頭(因此它會(huì)返回格式選擇之前的字符)或結(jié)尾(返回選擇中最后一個(gè)字符的格式)。

如果要根據(jù)當(dāng)前光標(biāo)位置反轉(zhuǎn)狀態(tài)(如果在開頭,則使用第一個(gè)字符,如果在結(jié)尾,則使用最后一個(gè)),則可以使用以下內(nèi)容:


查看完整回答
反對(duì) 回復(fù) 2023-05-23
?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

    def toggle_italic_text(self):

        cursor = self.textEdit.textCursor()

        if not cursor.hasSelection():

            charFormat = cursor.charFormat()

            charFormat.setFontItalic(not charFormat.fontItalic())

            cursor.setCharFormat(charFormat)

            # in this case, the cursor has to be applied to the textEdit to ensure

            # that the following typed characters use the new format

            self.textEdit.setTextCursor(cursor)

            return


        start = cursor.selectionStart()

        end = cursor.selectionEnd()

        newCursor = QtGui.QTextCursor(self.textEdit.document())

        newCursor.setPosition(start)


        if cursor.position() == start:

            cursor.setPosition(start + 1)

        charFormat = cursor.charFormat()

        charFormat.setFontItalic(not charFormat.fontItalic())

        newCursor.setPosition(end, cursor.KeepAnchor)

        newCursor.mergeCharFormat(charFormat)

如果要反轉(zhuǎn)選擇中的所有狀態(tài),則需要循環(huán)遍歷所有字符。

雖然您可以只更改每個(gè)字符的 char 格式,但這對(duì)于非常大的選擇來(lái)說(shuō)并不是一件好事,因此解決方案是僅在 char 格式實(shí)際從以前的狀態(tài)發(fā)生變化時(shí)應(yīng)用斜體,并且在選擇結(jié)束。


    def toggle_italic_text(self):

        # ...

        start = cursor.selectionStart()

        end = cursor.selectionEnd()

        newCursor = QtGui.QTextCursor(self.textEdit.document())

        newCursor.setPosition(start)


        cursor.setPosition(start)

        prevState = cursor.charFormat().fontItalic()

        while cursor.position() < end:

            cursor.movePosition(cursor.Right)

            charFormat = cursor.charFormat()

            if charFormat.fontItalic() != prevState or cursor.position() >= end:

                newPos = cursor.position()

                if cursor.position() < end:

                    newPos -= 1

                newCursor.setPosition(newPos, cursor.KeepAnchor)

                charFormat.setFontItalic(not prevState)

                newCursor.mergeCharFormat(charFormat)

                prevState = not prevState

                newCursor.setPosition(cursor.position() - 1)


查看完整回答
反對(duì) 回復(fù) 2023-05-23
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)