[vlmc-devel] [PATCH 1/4] Settings: Use Base64 to save QByteArray

Hugo Beauzée-Luyssen hugo at beauzee.fr
Sat Apr 30 19:03:48 CEST 2016


On 04/29/2016 10:05 AM, Yikai Lu wrote:
> "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 | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/src/Settings/Settings.cpp b/src/Settings/Settings.cpp
> index b8cef75..2092d59 100644
> --- a/src/Settings/Settings.cpp
> +++ b/src/Settings/Settings.cpp
> @@ -159,8 +159,14 @@ 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();
> +
> +        if ( val->type() == SettingValue::ByteArray )
> +            val->set( QByteArray::fromBase64( (*it).toVariant().toByteArray() ) );
> +        else
> +            val->set( (*it).toVariant() );
>      }
>      emit postLoad();
>  }
> @@ -173,7 +179,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() ) );
>      }
>  }
>  
> 
Is there a specific case where this would be an issue?

-- 
Hugo Beauzée-Luyssen
www.beauzee.fr


More information about the Vlmc-devel mailing list