QTextEdit.Как выбрать текст вручную? - PullRequest
11 голосов
/ 19 февраля 2012

Есть такие функции, как textEdit->textCursor()->selectionStart() и textEdit->textCursor()->selectionEnd(), но нет функций setSelectionStart, setSelectionEnd.

Можно ли как-нибудь выделить часть текста вручную?

Ответы [ 3 ]

27 голосов
/ 19 февраля 2012
 QTextCursor c = textEdit->textCursor();
 c.setPosition(startPos);
 c.setPosition(endPos, QTextCursor::KeepAnchor);
 textEdit->setTextCursor(c);

Этот фрагмент кода перемещает курсор в начальную позицию выделения с помощью setPosition, затем перемещает его в конец выделения, но оставляет привязку выбора в старая позиция, указав MoveMode в качестве второго параметра.

Последняя строка устанавливает выделение, которое будет видно внутри элемента управления редактированием, поэтому вам следует пропустить его, если вы просто хотите сделать какие-то манипуляции с выделенным текстом.

Кроме того, если у вас нет точных позиций, movePosition полезно: вы можете перемещать курсор в различными способами , например, одно слово вправо или вниз на одну строку.

0 голосов
/ 25 июня 2016

Я столкнулся с подобной проблемой.В Windows 10 может быть ошибка «перетаскивания».Мы используем QT_NO_DRAGANDDROP в качестве опции компилятора, что делает выбор текста в QTextEdit больше не неправильным.

Решение:

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: получить слово под указателем мыши?

0 голосов
/ 30 января 2014

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

QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);
...