在 Qt 5 中,您可以使用QJsonObject。一种方法是显式选择要序列化的控件:
QJsonObject MyDialog::serialize() const {
QJsonObject json;
json.insert("notebookid", ui->notebookid->toPlainText());
...
return json;
}
另一种方法是拥有一个使用 Qt 元数据的通用序列化程序。然后序列化每个命名控件的用户属性:
QJsonObject serializeDialog(const QWidget * dialog) {
QJsonObject json;
foreach (QWidget * widget, dialog->findChildren<QWidget*>()) {
if (widget->objectName().isEmpty()) continue;
QMetaProperty prop = widget->metaObject()->userProperty();
if (! prop.isValid()) continue;
QJsonValue val(QJsonValue::fromVariant(prop.read(widget)));
if (val.isUndefined()) continue;
json.insert(widget->objectName(), val);
}
return json;
}
您可以将QJsonDocument 转换为文本,如下所示:
QJsonDocument doc(serializeDialog(myDialog));
QString jsonText = QString::fromUtf8(doc.toJson());
不幸的是,Qt 5 的 json 代码需要大量更改才能在 Qt 4 下编译。