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, но туда не позиционирует. Почему?