Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt4 将QTextCursor移动到末尾时出现问题_Qt4_Qtextdocument - Fatal编程技术网

Qt4 将QTextCursor移动到末尾时出现问题

Qt4 将QTextCursor移动到末尾时出现问题,qt4,qtextdocument,Qt4,Qtextdocument,我试图在我正在编写的编辑器中实现一个简单的文本搜索。在出现这个问题之前,一切都很好!我试图在这里实现反向搜索。程序是:向后查找主题,如果未找到,则发出一次蜂鸣声,如果再次按下“查找”按钮,则转到文档末尾,然后再次进行搜索。“reachedEnd”是一个int,定义为编辑器类的私有成员。下面是执行向后搜索的函数 void TextEditor::findPrevPressed() { QTextDocument *document = curTextPage()->document(

我试图在我正在编写的编辑器中实现一个简单的文本搜索。在出现这个问题之前,一切都很好!我试图在这里实现反向搜索。程序是:向后查找主题,如果未找到,则发出一次蜂鸣声,如果再次按下“查找”按钮,则转到文档末尾,然后再次进行搜索。“reachedEnd”是一个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();
        }
    }
}

问题是光标不会移动到末端!它返回False,这意味着失败。这怎么可能失败?!!提前感谢。

如果我像这样简化您的代码:

if (!cursor.isNull()) {
   // (...)
}
else {
    // (...)
    cursor.movePosition(QTextCursor::End);
    // (...)
}
…我看到您在cursor.isNull()条件为true时调用movePosition()函数。
也许这就是它不起作用的原因…

因为这个问题得到了一些看法,而且它似乎是一个常见的问题,我认为它应该得到一个答案(即使作者最肯定地找到了答案)

从文件中:

QTextCursor QPlainTextEdit::textCursor()常量
返回 表示当前可见光标的QTextCursor注意 对返回的游标所做的更改不会影响QPlainTextEdit的游标; 使用setTextCursor()更新可见光标

因此,通过执行
cursor.movePosition(QTextCursor::End),您得到了它的一个副本它不起作用

我所做的是:

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

非常感谢您的帮助,但是cursor.isNull()返回游标是否指向文档中的某个位置。这并不意味着游标是空指针或其他什么(AFAIK),并且游标在这里不是指针。但我认为这是一个有用的提示,我将再次检查文档。确实谢谢。如何使用
QTextEdit
?@jww因此,如果您的文本框是QTextEdit对象,那么您将执行QTextCursor newCursor=textbox->textCursor();newCursor.movePosition(QTextCursor::End);textbox->setTextCursor(newCursor);