2012-07-27 201 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