앞서 포스팅한 DockWidget의 상태 정보를 저장하기 위해 Geometry 정보 및 state를 Json File에 기록하기 위한 시도를 진행했다.
2019/05/14 - [Programming/QT] - [QT] QDockWidget의 위치 및 상태 저장
결과적으로는, QJsonValue에 ByteArray를 그대로 집어넣는것은 작동하지 않으며, Base64와 같은 방식으로 인코딩한 뒤 기록을 해야한다.
QByteArray -> QVariant -> QJsonValue
QJsonValue는 QByteArray를 직접적으로 받는 방법이 없으며, 이를 처리하기 위해 QVariant로 변환 후 QJsonValue로 변환하는 방법을 시도해 보았다.
결과적으로, Empty string으로 저장이 되며, 적합하지 않은 방식이다.
QByteArray -> QString -> QJsonValue
ByteArray가 직접적으로 저장되지 않는다면, String으로 변환 후 처리하는 방식은 어떨까? 하며 시도를 해보았다.
이 방식은, ByteArray에 저장된 데이터의 형태에 따라 될수도, 안될수도 있다.
기본적으로 QString은 Ascii code를 저장하며, data의 형식에 따라 온전히 string으로 변환이 될 수도, 아닐수도 있다.
QByteArray -> Base64 string -> QJsonValue
QByteArray를 base64 방식으로 인코딩하여 저장하는 방법이다.
base64의 개념은 다음과 같다.
컴퓨터 분야에서 쓰이는 Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
출처 : https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464
위의 내용과 같은 특성을 통해 String형식으로 변환하되, 별도의 인코딩 과정을 거치면서 어떤 데이터를 담고 있더라도, 누락되는 부분없이 깔끔하게 저장할 수 있게 된다.
'Programming > QT' 카테고리의 다른 글
[QT] QOCI를 이용한 CLOB 데이터 insert중 ORA-03113 (EOF) 오류 발생 대처법 (0) | 2021.06.30 |
---|---|
[QT] CentOS 7 환경에서 QOCI (Oracle DB) Driver 빌드 (0) | 2021.06.28 |
[QT] static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE (0) | 2019.06.25 |
[QT] C++ std::string과 QString 간의 문자열 형 변환 방법 (0) | 2019.06.18 |
[QT] QObject::connect: Cannot queue arguments of type 'Type Name' (0) | 2019.06.12 |
[QT] QDockWidget의 위치 및 상태 저장 (1) | 2019.05.14 |
[QT] 프로그램 실행 시 모니터 지정 및 풀스크린 실행 (0) | 2019.05.09 |
[QT] QPixmap에서 image를 로드할 때 Segmentation fault가 뜨는 이유 (0) | 2019.04.06 |