使用QTextCursor选择一段文本

时间:2014-01-14 20:06:16

标签: c++ qt qtgui qtextcursor

使用Qt框架选择文本时遇到问题。例如,如果我有这个文件:“没时间休息”。我想选择“ime for r”并从文档中删除这段文字,我应该如何使用QTextCursor?这是我的代码:

QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
cursor->select(QTextCursor::LineUnderCursor);
cursor->clearSelection();

不幸的是,它从文本中删除了整行。我尝试过使用其他选择类型,如WordUnderCursor或BlockUnderCursor,但没有结果。或者也许还有更好的方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:5)

您的代码中存在以下几个问题:

  1. cursor->select(QTextCursor::LineUnderCursor);行选择整个当前行。你不想删除整行,为什么要写这个呢?删除这行代码。
  2. clearSelection()只是取消选择一切。请改用removeSelectedText()
  3. 请勿使用QTextCursor创建new。这是正确的,但不是必需的。你应该尽可能避免使用指针。 QTextCursor通常按值或引用传递。您也可以使用QPlainTextEdit::textCursor获取编辑光标的副本。
  4. 所以,代码看起来应该是这样的:

    QTextCursor cursor = ui->plainTextEdit->textCursor();
    cursor.setPosition(StartPos, QTextCursor::MoveAnchor);
    cursor.setPosition(EndPos, QTextCursor::KeepAnchor);
    cursor.removeSelectedText();
    

答案 1 :(得分:1)

您正在清除选择,而不是基于您的愿望的角色。

请阅读方法文档:

  

void QTextCursor::clearSelection()

     

通过将锚点设置为光标位置来清除当前选择。

     

请注意,会删除所选内容。

您可以看到它只删除了选择,而不是文本。请改用以下方法:

  

void QTextCursor :: removeSelectedText()

     

如果有选择,则删除其内容;否则什么都不做。

讨论了这个理论之后,让我们展示一下你能写的东西:

QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
// If any, this should be block selection
cursor->select(QTextCursor::BlockUnderCursor);
cursor->removeSelectedText();
        ^^^^^^^^^^^^^^^^^^