2012-07-27 260 views
8

我的表格上有一個QTextEdit,名爲translationInput。我正在嘗試爲用戶提供編輯功能。在QTextEdit中移動光標

這個QTextEdit將包含HTML格式的文本。我有一組按鈕,如「加粗」,「斜體」等等,它們應該在文檔中添加相應的標籤。如果沒有選擇文本時按下按鈕,我只想插入一對標籤,例如<b></b>。如果選擇了一些文字,我希望標籤從它的左側和右側出現。

這工作正常。不過,我還希望在此之後關閉標記之前將光標放置在之前,這樣用戶將能夠在新添加的標記內繼續鍵入,而無需手動重新定位光標。默認情況下,光標在之後顯示爲,新增文本(在我的情況下,緊跟在結束標記之後)。

下面是我對斜體按鈕的代碼:

//getting the selected text(if any), and adding tags. 
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>"); 
//Inserting the new-formed text into the edit 
ui.translationInput->insertPlainText(newText); 
//Returning focus to the edit 
ui.translationInput->setFocus(); 
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag. 
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 

然而,最後的行不進行任何操作,光標不移動,即使movePosition()回報true,這意味着所有的操作都已成功完成。

我也試過用QTextCursor::PreviousCharacter而不是QTextCursor::Left這樣做,並試圖在將焦點返回到編輯之前和之後移動它,但這不會改變任何內容。

所以問題是,我如何將光標移動到我的QTextEdit

回答

9

通過深入研究文檔解決了該問題。

textCursor()函數返回一個拷貝光標從QTextEdit。因此,修改實際的一個,必須使用setTextCursor()功能: `ui.translationInput-> moveCursor(QTextCursor ::左,QTextCursor:

QTextCursor tmpCursor = ui.translationInput->textCursor(); 
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 
ui.translationInput->setTextCursor(tmpCursor); 
+10

您可以直接使用'moveCursor()'移動文本光標:: MoveAnchor,4);' – iliis 2014-05-07 09:46:07

+0

我認爲上述評論應該變成答案。 – 2017-08-29 18:23:52