当我尝试在 qTextEdit 中设置文本时出错

error when i'm trying to set text in qTextEdit

本文关键字:置文本 出错 qTextEdit      更新时间:2023-10-16

我将Qt 5.3与MSVC2013一起使用。这是我代码的一部分:

mainwindow.cpp

#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    setupUi(this);
    connect(okButton,SIGNAL(clicked()),SLOT(onOKClicked()));
}
void MainWindow::onOKClicked(){
    arr0.Put(addBox->value(),posBox->value());
    QString str = arr0.GetArrText();
    arrayContent->setText(str);
}

变量"str"的内容是好的,因为它正在使用qDebug。

arrayContext变量是一个QTextEdit。当我尝试使用setText()时,我会得到以下错误:

QTextCursor::setPosition: Position '7' out of range

你知道为什么会发生在我身上吗?

由于某种神秘的原因,当您将新内容和旧光标指向新内容之外时,光标位置没有正确更新。这是Qt中的一个错误。

作为一种变通方法,你可以尝试一下:

void MainWindow::onOKClicked(){
    arr0.Put(addBox->value(),posBox->value());
    QString str = arr0.GetArrText();
    arrayContent->moveCursor(QTextCursor::Start);
    arrayContent->setText(str);
    arrayContent->selectAll(); // or arrayContent->moveCursor(QTextCursor::End);
}


或者您可以尝试直接对文档进行操作:

void MainWindow::onOKClicked(){
    arr0.Put(addBox->value(),posBox->value());
    QString str = arr0.GetArrText();
    arrayContent->moveCursor(QTextCursor::Start);
    arrayContent->document()->setPlainText(str);
    arrayContent->selectAll(); // or arrayContent->moveCursor(QTextCursor::End);
}