如何在 QTextEdit 中传递 JSON 对象

Posted

技术标签:

【中文标题】如何在 QTextEdit 中传递 JSON 对象【英文标题】:How to pass a JSON object inside a QTextEdit 【发布时间】:2020-07-29 14:42:21 【问题描述】:

我有一个小 GUI 用来加载/保存json 配置文件,最重要的参数在下面的 gui 中:

![配置]

问题我一直试图解决的问题是我无法在 QTextEdit 内创建对象,并且不知道为什么尽管我关注 official documentation 以了解如何做到这一点.

加载和保存按钮的代码如下。 另外,为了简洁起见,我只保留了旋转框的制作方式,当然还有 textedit:

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);
  

到目前为止我做了什么:

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

    我遇到了this source,我将其用作示例的指导,并解决了几乎所有问题,但QTextEdit 除外。

    This 附加帖子很有用,但仍然无法解决问题。

感谢您指出解决此问题的正确方向。

【问题讨论】:

【参考方案1】:

这行错了!!

QTextEdit textEdit = ui->textEdit->setPlainText();
    setPlainText() 需要 const QString &text 作为参数 你不能这样做,阅读official doc here 方法无效,即。它不返回任何内容,因此您不能使用 void 来初始化 QTextEdit 对象

更新:

您已经在布局中有一个 textEdit,所以没有理由重新定义一个...

你可以这样做:

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

【讨论】:

感谢您访问并阅读问题。错误从QTextEdit textEdit = QTextEdit::setText(obj["comments"]); 行的开头开始,错误显示:error: no matching function for call to ‘QTextEdit::setText(QJsonValueRef)’ QTextEdit textEdit = QTextEdit::setText(obj["comments"]); 你看到了我没看到的东西吗? @Emanuele 是的,我看到了问题,...但是您发布的代码不是正确的... @Emanuele 我用 json 值更新了我的答案...试试看更新我 是的,有效:) 非常感谢您的宝贵时间!

以上是关于如何在 QTextEdit 中传递 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vuejs 中传递 json 对象?

如何在 JSON 对象中传递变量 [重复]

如何在 React/Redux 中获取和传递对象(JSON API)?

ajax中如何把传递过来的json数据循环遍历出

如何使用android studio中的改造服务在请求中传递json

python PyQt4中如何获得QTextEdit的内容获得QLineEdit的内容有QLineEdit.text(),那QTextEdit呢?