如何在 QTextEdit 中传递 JSON object

How to pass a JSON object inside a QTextEdit

我有一个用于 load/save json 配置文件的小型 GUI,最重要的参数在下面的 gui 中:

![会议]

我一直试图解决的问题是我无法在 QTextEdit 中创建 object 并且我不确定为什么尽管如此我正在关注 official documentation 如何做到这一点。

下面是加载和保存按钮的代码片段。 同样为了简洁起见,我只保留了我如何处理旋转框,当然还有文本编辑器:

void SettingsForm::on_loadBtn_clicked()
{
  // Opening file dialog....

  if(listDocksConfig.isEmpty())
  {
    QMessageBox::information(this, tr("Message"), tr("Please Open Configuration"));
  }
  else
  {
    QJsonDocument doc;
    QJsonObject obj;
    QByteArray data_json;
    QFile input(listDocksConfig);
    if(input.open(QIODevice::ReadOnly | QIODevice::Text))
    {
      data_json = input.readAll();
      doc = doc.fromJson(data_json);
      obj = doc.object();

      const double xposValue = obj["X Pos"].toDouble();
      QTextEdit textEdit     = QTextEdit::setText(obj["comments"]);  // <- Error Here

      ui->doubleSpinBox_XPos->setValue(xposValue);
      ui->textEdit->setText(textEdit);      // <- Error Here
    }
    else
    {
       // do something
    }
  }
}

void SettingsForm::on_saveBtn_clicked()
{

  // saving configuration with file dialog....

  if(listDocksConfig.isEmpty())
  {
    // do something...
  }
  else
  {
    const double xposValue = ui->doubleSpinBox_XPos->value();
    QTextEdit textEdit     = ui->textEdit->setPlainText();  // <- Error Here

    QJsonDocument doc;
    QJsonObject obj;

    obj["X Pos"] = xposValue;
    obj["comments"] = textEdit.toString();     // <- Error Here

    doc.setObject(obj);
    QByteArray data_json = doc.toJson();
    QFile output(listDocksConfig);
  }
}

到目前为止我做了什么:

  1. 我咨询了 official documentation 如何解决这个问题,但无法弄清楚为什么那不起作用。我也继续尝试使用 setText 等替代方法,但仍然没有成功。

  2. 我遇到了 ,我将其用作示例的指导并解决了几乎所有问题,但 QTextEdit 一个问题。

  3. This追加post有用,但还是没能解决问题

感谢您为解决这个问题指明了正确的方向。

这行是错的!!

QTextEdit textEdit = ui->textEdit->setPlainText();
  1. setPlainText() 需要 const QString &text 作为参数 你不能那样做,请阅读 official doc here
  2. 该方法无效,即。它 returns 什么都没有,所以你不能使用 void 来初始化一个 QTextEdit 对象

更新:

您在布局中已有一个 textEdit,因此没有理由重新定义一个...

你可以做到:

ui->textEdit->setPlainText(obj["comments"].toString());