Qt에서 프로그램 설정 저장하기

언제 나올지 모르는 QOM 2.0을 작업하고 있는 이 시점에서 최근 이뤄진 기능은 환경 설정과 저장이다. 대부분의 프로그램이 따르듯이 시작 시 로드/종료 시 저장 모델을 따르기 위해서 시작 시 레지스트리나 C:\Documents and Settings\%USERNAME%\Application Data\QOM 같은 폴더에 파일을 쓴 다음 불러오는 모델을 취하려고 했다. 그래서 QOM의 입력/테스트 플러그인 모두가 개별 설정을 가질 수 있도록 하였고, API에 LoadConf와 InitTest2 함수가 추가되었다. 이들은 각각 설정과 관련되어 있는 함수이다.
그런데 내가 plain text 파일로만 할 것인가? 그래서 레지스트리에 저장도 고민해 보았지만 이것은 크로스 플랫폼적인 방법이 아니다. QOM의 장점 중 하나인 리눅스 및 맥 OS X 소스 호환성을 내가 앞장서서 깰 이유는 없기 때문이다. 그래서 찾다찾다 고민하다 나온 것이 QSettings 클래스이다. 이 녀석은 다양한 곳에 단순하게 쓸 수 있는 것이 을 연상시킨다.
쓰는 방법이 실제로 간단하다. 우선 ui가 시작되는 곳에
QSettings settings("회사명", "프로그램명");
을 집어넣는다. 그리고 설정을 읽어오려면
global.showwords = ksets.value("module/showwords", false).toBool();
global.random = ksets.value("module/random", false).toBool();
global.inverse = ksets.value("module/inverse", false).toBool();
global.whole = ksets.value("module/whole", true).toBool();
global.list_inverse = ksets.value("module/list_inverse", false).toBool();
global.words_count = ksets.value("module/words_count", -1).toInt();

같이 value 함수를 이용해서 원하는 경로에 있는 값을 읽어올 수 있다. 그리고 설정을 쓰는 것은 프로그램이 종료될 때 똑같은 선언을 해 준 다음
ksets.setValue("module/showwords", global.showwords);
ksets.setValue("module/random", global.random);
ksets.setValue("module/inverse", global.inverse);
ksets.setValue("module/whole", global.whole);
ksets.setValue("module/list_inverse", global.list_inverse);
ksets.setValue("module/words_count", global.words_count);
ksets.setValue("module/encoding_name", global.encoding_name);

와 같이 setValue를 사용해 주면 된다. 기본적으로 모든 플랫폼에서 가장 적합한 방법을 고르기 때문에 문제가 생길 가능성은 없다. 윈도의 경우 레지스트리 키가 이렇게 생긴다.
리눅스의 경우 conf 파일이 비슷하게 생긴다고 알고 있으며, 결론은 귀찮게 레지 값이나 텍스트 파일 찌르는 것보다 이런 게 더 낫다는 것이다.