将光标移动到QTextEdit内部

时间:2012-07-27 07:31:16

标签: c++ qt qtextedit qtextcursor

我的表单上有一个QTextEdit,称为translationInput。我正在尝试为用户提供编辑功能。

QTextEdit将包含HTML格式的文本。我有一组按钮,例如“粗体”,“斜体”等,它们应该将相应的标签添加到文档中。如果在没有选择文本时按下按钮,我只想插入一对标签,例如<b></b>。如果选择了某些文本,我希望标签从左侧和右侧显示。

这很好用。但是,我还希望在此之后将光标放在之前的结束标记中,这样用户就可以继续在新添加的标记内输入,而无需手动重新定位光标。默认情况下,光标在新添加的文本后右侧显示(在我的情况下,在结束标记之后)。

以下是 Italic 按钮的代码:

//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

1 个答案:

答案 0 :(得分:9)

通过深入研究文档解决了这个问题。

textCursor()函数从QTextEdit返回光标的副本。因此,要修改实际的函数,必须使用setTextCursor()函数:

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