【问题标题】:error when i'm trying to set text in qTextEdit当我尝试在 qTextEdit 中设置文本时出错
【发布时间】:2014-12-22 02:03:55
【问题描述】:

我正在使用带有 MSVC2013 的 Qt 5.3。这是我的代码的一部分:

ma​​inwindow.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

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

【问题讨论】:

  • 您是否受到this bug的影响?
  • 也许是这样。但是我必须怎么做才能避免这个问题呢?只降级我的 Qt 版本?有什么解决方法吗?

标签: c++ qt qtextedit qtwidgets qtextcursor


【解决方案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);
}

【讨论】:

  • 但是我在运行setText()之前并没有在这个textedit区域添加一些内容。你的代码也会产生同样的错误。
  • 我很确定它是在新内容大于旧内容时生成的(乞求您的文本长度为零)。如果解决方法不能使其静音,那么您别无选择忽略这一点(或尝试寻找其他解决方法,我有另一个建议)。如果此错误仅出现在日志中,则不会对最终用户产生影响,因此您可以忽略它。
  • 感谢您的回答。问题是我的程序在收到此消息后崩溃。但是我已经认为对象“arr0”调用的方法中存在问题,当我在此方法中分配内存时可能会出现一些错误。但是为什么在这种情况下程序执行会到达 setPlainText() 的调用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2021-01-22
  • 2019-04-08
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多