[vlmc-devel] [PATCH 1/4] Settings: Use Base64 to save QByteArray
Yikai Lu
luyikei.qmltu at gmail.com
Fri Apr 29 17:18:15 CEST 2016
"Note: A QByteArray can store any byte values including '\0's, but most functions that take char * arguments assume that the data ends at the first '\0' they encounter."
Because of the above, we can't save QByteArray directly.
---
src/Settings/Settings.cpp | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/Settings/Settings.cpp b/src/Settings/Settings.cpp
index b8cef75..dd41d4d 100644
--- a/src/Settings/Settings.cpp
+++ b/src/Settings/Settings.cpp
@@ -159,8 +159,17 @@ Settings::loadJsonFrom( const QJsonObject &object )
if ( isChildSettings == true )
continue;
- if ( setValue( it.key(), (*it).toVariant() ) == false )
+ SettingValue* val = value( it.key() );
+ if ( val == nullptr )
+ {
vlmcWarning() << "Loaded invalid project setting:" << it.key();
+ continue;
+ }
+
+ if ( val->type() == SettingValue::ByteArray )
+ val->set( QByteArray::fromBase64( (*it).toVariant().toByteArray() ) );
+ else
+ val->set( (*it).toVariant() );
}
emit postLoad();
}
@@ -173,7 +182,10 @@ Settings::saveJsonTo( QJsonObject &object )
{
if ( ( val->flags() & SettingValue::Runtime ) != 0 )
continue ;
- object.insert( val->key(), QJsonValue::fromVariant( val->get() ) );
+ if ( val->type() == SettingValue::ByteArray )
+ object.insert( val->key(), QJsonValue( QString( val->get().toByteArray().toBase64() ) ) );
+ else
+ object.insert( val->key(), QJsonValue::fromVariant( val->get() ) );
}
}
--
1.9.1
More information about the Vlmc-devel
mailing list