在QTextEdit中移动光标
问题描述:
我的表格上有一个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
?
答
通过深入研究文档解决了该问题。
textCursor()
函数返回一个拷贝光标从QTextEdit
。因此,修改实际的一个,必须使用setTextCursor()
功能: `ui.translationInput-> moveCursor(QTextCursor ::左,QTextCursor:
QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);
您可以直接使用'moveCursor()'移动文本光标:: MoveAnchor,4);' – iliis 2014-05-07 09:46:07
我认为上述评论应该变成答案。 – 2017-08-29 18:23:52