2014-01-16 17 views
0

我有以下幾點:打開QString時,JSON

QString notebookid = ui->notebookid->toPlainText(); 
QString tagid = ui->tagid->toPlainText(); 
QString userid = ui->userid->toPlainText(); 
QString subject = ui->subject->toPlainText(); 
QString comment = ui->comment->toPlainText(); 

我需要把它們變成JSON,其中的關鍵是notebookid,標籤識別等和值在用戶界面 - > notebookid等。

要做到這一點,最好的方法是什麼?

謝謝。

回答

0

在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

下編譯
+0

我認爲JSON是不容易對付前QT 5? – sark9012

+0

@Luke:Qt根本沒有提供json類,可以使用其他庫,如[boost propertytree](http://stackoverflow.com/questions/12394472/serializing-and-deserializing-json-with-boost)。 –

+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/45417/discussion-between-luke-and-kuba-ober) – sark9012

1

我將根據您使用Qt 4.8的事實來回答這個問題,並且不會從Qt5獲得QJsonObject。爲此,我使用QJSON。這是一個易於使用的庫,它使用QVariants來解析和序列化數據。

這將是你如何把你的數據轉換成JSON使用QJSON:

QVariantMap jsonMap; 
jsonMap.insert("notebookid", notebookid); 
jsonMap.insert("tagid", tagid); 
jsonMap.insert("userid", userid); 
jsonMap.insert("subject", subject); 
jsonMap.insert("comment", comment); 

QJson::Serializer serializer; 
bool ok; 
QByteArray json = serializer.serialize(jsonMap, &ok); 
assert (ok);