2

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

主窗口.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 一起使用。

arrayContent 变量是一个 QTextEdit。当我尝试使用 setText() 时,出现以下错误:

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

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

4

1 回答 1

1

由于某些神秘的原因,当您设置新内容并且旧光标指向新内容之外时,光标位置未正确更新。这无疑是 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);
}
于 2014-10-26T22:05:13.203 回答