QTextEdit. Как выбрать текст вручную?
Есть такие функции, как textEdit->textCursor()->selectionStart()
а также textEdit->textCursor()->selectionEnd()
, но нет функций setSelectionStart
, setSelectionEnd
,
Есть ли способ выбрать часть текста вручную?
3 ответа
QTextCursor c = textEdit->textCursor();
c.setPosition(startPos);
c.setPosition(endPos, QTextCursor::KeepAnchor);
textEdit->setTextCursor(c);
Этот фрагмент кода перемещает курсор в начальную позицию выделения, используя setPosition
, затем перемещает его в конец выделения, но оставляет привязку выбора в старой позиции, указав MoveMode
как второй параметр.
Последняя строка устанавливает выделение, чтобы быть видимым внутри элемента редактирования, поэтому вы должны пропустить его, если вы просто хотите сделать некоторые манипуляции с выделенным текстом.
Кроме того, если у вас нет точных позиций, movePosition
Это полезно: вы можете перемещать курсор различными способами, например, одним словом вправо или одной строкой вниз.
Я столкнулся с подобной проблемой. В Windows 10 может быть ошибка "перетаскивания". Мы используем QT_NO_DRAGANDDROP в качестве опции компилятора, что делает выбор текста в QTextEdit больше не Mork.
Решение:
void QTextEditEx::mouseMoveEvent(QMouseEvent *event)
{
QTextEdit::mouseMoveEvent(event);
if (event->buttons() & Qt::LeftButton)
{
QTextCursor cursor = textCursor();
QTextCursor endCursor = cursorForPosition(event->pos()); // key point
cursor.setPosition(pos, QTextCursor::MoveAnchor);
cursor.setPosition(endCursor.position(), QTextCursor::KeepAnchor);
setTextCursor(cursor);
}
}
void QTextEditEx::mousePressEvent(QMouseEvent *event)
{
QTextEdit::mousePressEvent(event);
if (event->buttons() & Qt::LeftButton)
{
QTextCursor cursor = cursorForPosition(event->pos());
// int pos; member variable
pos = cursor.position();
cursor.clearSelection();
setTextCursor(cursor);
}
}
ссылка:
Два существующих ответа
Попробуй использовать:
QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);