LINUX.ORG.RU

Как в QTextEdit сделать перемещение курсора?

 , , , ,


0

1

Qt 5.2.1. Делаю простой текстовый редактор. Чтоб по Ctrl+F 1) вылазил QInputDialog::getText, 2) его результат мы ищем в QTextEdit. Если находим, ставим туда курсор, и рекурсия на п.1, только дальше по тексту. Добился того, что выделение бегает по тексту так, как мне нужно (см. корявую gifку). Но курсор вслед за ним не перемещается! Мой код:

void MyQTEditor::Find(QString pFind, QTextCursor pCur)
{
    bool bOk;
    QString sFind = QInputDialog::getText(0, "Найти", "Найти что:", QLineEdit::Normal, pFind, &bOk);

    if (!bOk) return;

    QList<QTextEdit::ExtraSelection> lSel;

    QTextCursor findCur = ui->textEdit->document()->find(pFind, pCur);
    if(findCur != pCur)
    {
            QTextEdit::ExtraSelection xtra;
            xtra.format.setBackground(QColor(Qt::green).lighter(125));
            xtra.cursor = findCur;
            lSel.append(xtra);
            ui->textEdit->setExtraSelections(lSel);

            ui->textEdit->textCursor().setPosition(findCur.position());

            Find(pFind, findCur);
    }
}
Вот у меня вопросы:
1) Вот есть textEdit->find, который делает всё, что нужно, но не умеет искать с произвольного места. Почему?
2) Вот есть textEdit->moveCursor, который курсор передвигает, но не умеет передвигать на произвольную позицию. Как так-то?
3) Есть textEdit->document()->find, который умеет искать с произвольного места, возвращает QTextCursor, но
4) Есть textEdit->textCursor().setPosition, который принимает позицию курсора с предыдущего textEdit->document()->find, но туда не позиционирует. Почему?

★★★★★

QTextCursor textCursor = ui->textEdit->textCursor();

textCursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, x);
textCursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, y);

ui->textEdit->setTextCursor(textCursor);

Liz812
()
Ответ на: комментарий от Liz812

Спасибо! Действительно, курсор начал перемещаться, немного допилить, будет ОК. Но, что курил архитектор QT?

tiinn ★★★★★
() автор топика

Работает, но правильно - только если в textEdit стоит QTextOption::NoWrap. Мне и так сойдёт.

tiinn ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.