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);
    }
}

ссылка:

  1. Два существующих ответа

  2. QTextEdit: получить слово под указателем мыши?

Попробуй использовать:

QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);
Другие вопросы по тегам