Выбор фрагмента текста с помощью 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

Решение

В вашем коде есть несколько проблем:

  1. cursor->select(QTextCursor::LineUnderCursor); линия выбирает всю текущую строку. Вы не хотите удалять всю строку, так зачем вы пишете это? Удалите эту строку кода.
  2. clearSelection() просто отменяет выбор использование removeSelectedText() вместо.
  3. Не создавать QTextCursor с помощью new, Это правильно, но не нужно. Вы должны избегать указателей, когда это возможно. QTextCursor обычно передается по значению или ссылке. Также вы можете использовать QPlainTextEdit::textCursor чтобы получить копию редактируемого курсора.

Итак, код должен выглядеть так:

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

Другие решения

Вы очищаете выбор в отличие от персонажей на основе вашего желания.

Пожалуйста, ознакомьтесь с документацией метода:

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();
^^^^^^^^^^^^^^^^^^
1

По вопросам рекламы [email protected]