あなたはJSONに保存することができ、文字列にQMLのソースを変換するQByteArray::toBase64()
を使用することができますバックQMLの文字列に保存されたBase64文字列を読み取るために
void SourceCodeSerialiser::read(const QJsonObject &json)
{
mQml = QByteArray::fromBase64(json["qml"].toString().toUtf8());
}
そしてQByteArray::toBase64()
:
void SourceCodeSerialiser::write(QJsonObject &json) const
{
json["qml"] = QString(mQml.toUtf8().toBase64());
}
これは、次のQMLをオン
(mQml
はQString
ある):
このBase64文字列に
import QtQuick 2.0
Item {
id: item
}
:
aW1wb3J0IFF0UXVpY2sgMi4wCgpJdGVtIHsKICAgIGlkOiBpdGVtCn0=
@dtechで述べたように、それはいくつかのメモリを節約するためにqCompress()
とqUncompress()
を使用してバイト配列を圧縮することも可能です:
void SourceCodeSerialiser::read(const QJsonObject &json)
{
mQml = qUncompress(QByteArray::fromBase64(json["qml"].toString().toUtf8()));
}
void SourceCodeSerialiser::write(QJsonObject &json) const
{
json["qml"] = QString(qCompress(mQml.toUtf8(), 9).toBase64());
}
この結果、次のBase64文字列になります。
AAAAKXjay8wtyC8qUQgsCSzNTM5WMNIz4OLyLEnNVajmUgCCzBQrhUwgl6sWABKDDFM=
QMLスニペットが小さかったため、これは非圧縮バージョンよりも大きくなりました。より大きなQMLファイルには、圧縮のメリットがあります。
メモリを節約するために、バイト配列を圧縮することもできます。 – dtech
ああ、私はそれのための機能があるのか知りませんでした。ありがとう! – Mitch
@dtech 'QString(qCompress(mQml.toUtf8()。toBase64()、9))'は空文字列になっているようです - 'QByteArray'を' QString'に変換するにはどうすればいいですか? – Mitch