Проблема с перемещением QTextCursor в конец - PullRequest
3 голосов
/ 22 июля 2011

Я пытаюсь реализовать простой текстовый поиск в редакторе, который я пишу. Все было хорошо до этой проблемы! Я пытаюсь осуществить обратный поиск здесь. Процедура такова: найдите объект назад, если он не найден, подайте звуковой сигнал один раз, и, если кнопка поиска была нажата еще раз, перейдите к концу документа и выполните поиск снова. "достигаемый" является int, определяемый как закрытый член класса редактора. Вот функция, которая выполняет обратный поиск.

void TextEditor::findPrevPressed() {
    QTextDocument *document = curTextPage()->document();
    QTextCursor    cursor   = curTextPage()->textCursor();

    QString find=findInput->text(), replace=replaceInput->text();


    if (!cursor.isNull()) {
        curTextPage()->setTextCursor(cursor);
        reachedEnd = 0;
    }
    else {
        if(!reachedEnd) {
            QApplication::beep();
            reachedEnd = 1;
        }
        else {
            reachedEnd = 0;
            cursor.movePosition(QTextCursor::End);
            curTextPage()->setTextCursor(cursor);
            findPrevPressed();
        }
    }
}

Проблема в том, что курсор не двигается до конца! И это возвращает Ложь, что означает неудачу. Как это может потерпеть неудачу? !! Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 01 июня 2016

Поскольку этот вопрос получил некоторые точки зрения и, похоже, является общей проблемой, я думаю, что он заслуживает ответа (хотя автор наверняка это выяснил).

Из документации:

QTextCursor QPlainTextEdit :: textCursor () const
Возвращает копию QTextCursor, которая представляет текущий видимый курсор. Обратите внимание, что изменения в возвращенном курсоре не влияют на курсор QPlainTextEdit ;используйте setTextCursor () для обновления видимого курсора.

Итак, вы получили его копию, и, выполнив cursor.movePosition(QTextCursor::End);, она не будет работать.

То, что я сделал, это:
QTextCursor newCursor = new QTextCursor(document);
newCursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(newCursor);

3 голосов
/ 22 июля 2011

Если я упросту ваш код следующим образом:

if (!cursor.isNull()) {
   // (...)
}
else {
    // (...)
    cursor.movePosition(QTextCursor::End);
    // (...)
}

... Я вижу, что вы вызываете функцию movePosition (), пока условие cursor.isNull () выполняется. Может быть, это причина того, что это не работает ...

...