开发者

Problem in Moving QTextCursor to the End

开发者 https://www.devze.com 2023-03-21 23:48 出处:网络
I\'m trying to implement a simple text search in an editor i\'m writing. Everything have been fine until this problem! I\'m trying to implement a backward search here. The procedure is: look for the s

I'm trying to implement a simple text search in an editor i'm writing. Everything have been fine until this problem! I'm trying to implement a backward search here. The procedure is: look for the subject backward, if not found, beep once, and if find button 开发者_如何学JAVAwas pressed again, go to the end of the document, and do the search again. "reachedEnd" is an int, defined as a private member of the editor class. Here's the function that does the backward search.

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

The problem is that cursor doesn't move to the end! And it returns False, which means failure. How can this fail?!! Thanks in advance.


Since this question got some views and it appears to be a common problem, I think it deserves an answer (even though the author most surely figured it out).

From the documentation:

QTextCursor QPlainTextEdit::textCursor() const
Returns a copy of the QTextCursor that represents the currently visible cursor. Note that changes on the returned cursor do not affect QPlainTextEdit's cursor; use setTextCursor() to update the visible cursor.

So you got a copy of it and by doing cursor.movePosition(QTextCursor::End); it wouldn't work.

What I did is:

QTextCursor newCursor = new QTextCursor(document);
newCursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(newCursor);


If I simplify your code like this:

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

...I see that you call the movePosition() function while the cursor.isNull() condition is true. Maybe this is the reason it doesn't work...

0

精彩评论

暂无评论...
验证码 换一张
取 消