+7 (495) 229-0436 | shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 |
|
|
Один из методов работы с конфигурационными файлами в С++ (Qt)07.08.2012 12:19
unixod
Практически в каждом проекте, встает задача персистентного чтения/записи конфигурации. Не секрет что существует большое количество уже готовых библиотек для решения этой задачи. Некоторые из-них просты, некоторые чуть сложнее в использовании. ВведениеВ Qt есть очень удобный класс QSettings . В принципе он очень прост в использовании:
Из приведенного выше примера, обычного использования QSettings , сразу становятся видны проблемы расширяемости и поддержки кода:
Если внимательно еще раз просмотреть все вышеописанные проблемы, то можно сделать вывод: ключ представлен строкой - это и есть основная проблема. Ведь действительно, если в качестве ключа мы будем использовать перечисления (enums), то все вышеперечисленное разом улетучивается. Перечисления конечно же удобны, но QSettings требует, в качестве параметра ключа - строку. Т.е. нам нужен некоторый механизм, который давал бы нам возможность транслировать значения перечислений в строки (извлекать строковые значения элементов перечислений). Например из следующего перечисления:
нужно как-то извлечь 3 строки: "One", "Two", "Three". К сожалению стандартными средствами C++ это сделать невозможно. Но как же быть? Тут нам на помощь приходит Qt со своей метаобъектной моделью, а если точнее QMetaEnum . Про QMetaEnum писать не буду, так как это уже отдельная тема. Могу лишь дать ссылки: раз, два.
РеализацияИмея на вооружении QMetaEnum , теперь мы можем реализовать класс Settings, лишенный всех вышеперечисленных недостатков, а также предоставляющий возможность задания дефолтных настроек. Класс Settings представляет из себя синглтон Мейерса, это нам дает простоту настройки и его использования:
settings.h (Раскрыть спойлер) settings.cpp (Раскрыть спойлер) В данной реализации, класс QSettings , используется исключительно для кроссплатформенного доступа к настройкам. Конечно же по желанию QSettgins может быть заменен любым другим механизмом, например SQLite .
Пример использованияКласс Settings предоставляет очень простой и удобный интерфейс, состоящий всего из трех статических методов: void setDefaults(const QString &str); - установка параметров поумолчаниюQVariant get(Key, Section); - чтение значения (секция может быть опущена)ValueRef set(Key, Section); - запись значения (секция может быть опущена)
вот пример синтаксиса описания настроек по умолчанию:
default.cfg (Раскрыть спойлер) как можно заметить формат - простой: [section name]/key : value;
ЗаключениеСтоит заметить что данный класс Settings легко расширяется. Т.е. при желании, добавить/удалить/переименовать какие-нибудь ключи или секции, всего лишь надо изменить соответствующий enum! У читающего может возникнуть вопрос а нельзя ли как нибудь вынести общую логику "за скобки".
При сборке не забываем включить поддержку С++11:
Спасибо за внимание. ) Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |