Название: Чтение ключей из QSettings Отправлено: deMax от Август 23, 2013, 08:17 Можно ли выполнить данный код без использования begingroup
Код: settings.beginGroup("fridge"); Приложение многопоточное и конструкция begingroup может запороть корректность чтения настроек из других потоков. Сам класс использует статические методы для работы с настройками: Код: class Settings Название: Re: Чтение ключей из QSettings Отправлено: Bepec от Август 23, 2013, 08:27 Эммм... Как то бредово, если честно, выглядит ваше утверждение, что может запороть корректность. Сделайте функцию с параметром - именем группы, дети которой нужны.
PS по моему у вас архитектура тю тю. Название: Re: Чтение ключей из QSettings Отправлено: deMax от Август 23, 2013, 08:39 Цитировать Как то бредово, если честно, выглядит ваше утверждение, что может запороть корректность Я решил считать все элементы группы, вызвал begingroup, в это время другой поток захочет считать значение, в результате qsettings допишет к названию ключа группу и не найдет значение.Цитировать PS по моему у вас архитектура тю тю. Стандартное и красивое решение, мне нужен класс настроек к которому имеют доступ многие классы. Обращение к настройкам происходит через статические методы QSettings::getValue(key);Решений вижу несколько: 1) создать Mutex и блокировать работу с настройками, во время тупой функции begingroup-endgroup. (не стоит свеч, еще и другие потоки тормозить из за всяких недодуманных функций) 2) использовать Allkeys(). (Пойду этим путем) 3) хранить список ключей в параметре настрек, чтобы не использовать childkeys ... Заменить QSettings нормальным классом хотелось бы childkeys(QString group) Название: Re: Чтение ключей из QSettings Отправлено: Bepec от Август 23, 2013, 09:00 Бредово в смысле использовать один QSettings.
Я думаю, вам стоит считывать настройки в начале работы программы и хранить внутри в какой-либо структуре. А при закрытии/завершении сохранять в QSettings. Ну или как вариант в этой функции создавайте новый QSettings и отдавайте его childKeys. PS попробуйте. Название: Re: Чтение ключей из QSettings Отправлено: deMax от Август 23, 2013, 09:25 Цитировать Бредово в смысле использовать один QSettings. Времени пока нету на них тратить. Настройки не большие, пока работают да и ладно. Запись в настройки производиться оператором и это явление редкое, чтение с учетом кеша диска... не будет проблемным.Реализовал через дополнительное поле. Название: Re: Чтение ключей из QSettings Отправлено: panAlexey от Август 23, 2013, 13:09 Бредово в смысле использовать один QSettings. А я бы руки поотбивал за такой подход.Я думаю, вам стоит считывать настройки в начале работы программы и хранить внутри в какой-либо структуре. А при закрытии/завершении сохранять в QSettings. Сколько раз приложение вылетало а потом приходилось заново выставлять настройки. Я за то, что-бы настройки сериализовались в момент установки и считывались когда понадобятся. Тем паче если прога сетевая и администратору надо порыхлому быстро че-нить оттюнить. ПС. Кешь конечно дело, но потеря настроек - не хорошо. Название: Re: Чтение ключей из QSettings Отправлено: Bepec от Август 23, 2013, 13:37 Завершение может быть и аварийным ^.^
Я не спорю, что резервное надо делать после каждого изменения настроек. Но вот с его подходом один QSettings - бредово :) Название: Re: Чтение ключей из QSettings Отправлено: voral от Август 23, 2013, 15:33 Но вот с его подходом один QSettings - бредово :) Поддерживаю. По теме. Как бы берем код из асситента:Код: QSettings settings("MySoft", "Star Runner"); |