문제

QT 응용 프로그램을 작성하고 있으며 프로그램 설정을 저장해야합니다. 비 승인 사용자가 쉽게 편집 할 수 있지만 고급 사용자에게는 유연하기를 원합니다 (따라서 다른 프로그램, 스크립트를 통해 쉽게 자동 편집 할 수 있습니다). QSETTINGS는 Windows의 경우 레지스트리 인 기본 형식과 대부분의 다른 플랫폼에서 기본 인 INI 형식의 두 가지 형식을 제공합니다. INI는 괜찮지 만 @QString (...) 또는 다른 QT 물건을 보는 것은 실제로 읽을 수 없으며 오류가 발생하기 쉽습니다.

레지스트리도 좋지 않습니다. 그것은 엉망이되도록 설계되지 않았으므로 편집 또는 고급 사용에 정확히 좋지 않습니다. 스레드와 여러 QSettings 객체에 걸쳐 동기화 문제를 해결합니다 (따라서 모든 것을 닦아내는 것은 아니지만 읽기 쓰기 사물함으로 보호되는 하나의 글로벌 객체 만 사용할 수 있습니다). 나는 XML을보고 있지만, 그것은 매우 대담한 장점이며 QSettings 형식 (실제로 문제가 아님)을 작성해야하지만 매우 유연합니다.

나는 XML에 대한 다른 대안이 존재한다는 것을 알고 있지만 나는 그들에게 정말로 익숙하지 않습니다. 나는 확실히 기본 일이 아니라 내 최종 형식에 대한 예외를 구식을 쓰고 싶지 않습니다.

업데이트 - 참고 : 나는 QSettings를 전혀 우회하지 않을 것입니다. 그에 대한 형식 만 쓸 것입니다. 그것은 단지 두 개의 함수 포인터 (읽기 및 쓰기 함수를 위해)가 정적 함수로 전달 된 다음 내 형식을 사용할 수있는 것처럼 보입니다.

Update 2: 또한 GUI가없는 Linux 서버에 대해서도 걱정됩니다. 사람들은 관리자를 사용하지 않고 Nano 또는 이와 유사한 것을 통해 서버에서 구성을 쉽게 편집 할 수 있기를 바랍니다 (예, 데몬이 있습니다. 서버 및 원격 GUI 관리자).

도움이 되었습니까?

해결책

어떤 이유로 든 우회하게됩니다 QSettings 구성 파일 용 XML을 고려할 때 사용 가능한 LIB를 좋아하는 방법에 따라 JSON 또는 YAST를 살펴 보는 것이 좋습니다.

사이드 인테로서, 사용자가 파일을 수동으로 수동으로 편집하지 않으려면 가장 쉬운 것을 선택하십시오 (QSettings형식의 선택은 단일 비트 (har har)가 중요하지 않기 때문에 당신의 인생과 함께 나아가십시오.

다른 팁

당신은 사용할 수 있습니다 QSETTINGS 이것을 달성하기위한 수업. 응용 프로그램이 다음 출시시 설정을 검색하기 위해 응용 프로그램을 저장할 수있는 추상화 클래스입니다.

설정 저장 :

QSettings settings("ValueName",  "Value");

설정 읽기 :

QString v = settings.value("ValueName");

.ini 파일을 통해 QSETTINGS를 수행하는 것으로 시작하여 많은 문제가 발생하는지 확인합니다. 문제가 없으면 XML 솔루션을 사용할 필요가 없습니다. XML 솔루션을 원한다면 (언급했듯이) QSettings 객체에 대한 Formatter를 추가 할 수 있습니다.

Verbosity를 보는 또 다른 방법은 내용의 견고성입니다. 어떤 이유로 든 (알파 입자가 디스크를 폭파하여 단일 비트를 뒤집게하는 경우) 여전히 거기에 들어가서 필요한 오류 수정을 할 수 있습니다. 이진 파일, 단일 비트 오류는 데이터가 완전히 손실되었음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top