Структура такова:
1. Класс чтения настроек, который оповещает нужные классы.
2. Класс проверки настроек на изменение, который оповещает нужные классы. (в данном случае класс чтения)
Оба класса создаются в main.cpp и живут до окончания работы программы, поэтому использование синглтона тут излишне. К тому же с синглтоном можно будет огрести проблем, если в двух местах будет попытка, допустим, сделать beginGroup.
Можно было из main.cpp передать расположение файла, но тогда теряется универсальность и законченность класса SettingsChangeChecker. ИМХО, так код более обобщен и универсален.
Буду рад подискутировать на данную тему.
Да, забыл упомянуть, в программе настройки не меняются. Они меняются извне.