Russian Qt Forum
Ноябрь 06, 2024, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.x.x] Создать копию QSettings  (Прочитано 4917 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Февраль 22, 2011, 11:55 »

Конструктор копирования и оператор присваивания для QSettings запрещены. Как извернуться и получить QSettings идентичный нужному? Идентичный - в смысле ссылающийся на то же место хранения настроек.

Код
C++ (Qt)
cloneSettings.setPath (settings.format(), settings.scope(), settings.fileName());
 
не катит

---------------------------------------
Сам отвечу:
Код
C++ (Qt)
QSettings cloneSettings (settings.fileName(), settings.format());
 
« Последнее редактирование: Февраль 22, 2011, 12:02 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Akon
Гость
« Ответ #1 : Февраль 22, 2011, 19:38 »

А за чем это нужно?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Февраль 22, 2011, 20:32 »

Ну, мне необходимо следить за изменением настроек. Написал класс SettingsChangeChecker. Ему необходимо передать QSettings, но указателем это делать проблематично. Вот и возник вопрос. Кстати, все отлично получилось. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Февраль 22, 2011, 20:59 »

А если создать синглтон, который будет возвращать ссылку на объект QSettings и заюзать её в SettingsChangeChecker, не?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Akon
Гость
« Ответ #4 : Февраль 22, 2011, 21:16 »

Цитировать
А если создать синглтон, который будет возвращать ссылку на объект QSettings и заюзать её в SettingsChangeChecker, не?
+1
Для сеттинга всегда использовал синглтон Мейерса. Но это типовой случай. У меня никогда не возникало необходимости за него выходить.

Цитировать
Ему необходимо передать QSettings, но указателем это делать проблематично.

SettingsChangeChecker глубоко сидит? Не хочешь тащить через код указатель на наблюдаемый QSettings?

Получается, фактически обсервишь непосредственно файл настроек по sync(), и без разницы какими сеттингами и из каких программ он изменяется, да хоть руками из текст. редактора. Неплохое решение, так сказать, без посредников.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 22, 2011, 21:50 »

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

Да, забыл упомянуть, в программе настройки не меняются. Они меняются извне.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Февраль 22, 2011, 22:24 »

Цитировать
К тому же с синглтоном можно будет огрести проблем, если в двух местах будет попытка, допустим, сделать beginGroup.

Проблемы можно избежать обернув QSettings и создав геттеры\сеттеры для сохряняемых настроект.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Февраль 22, 2011, 22:32 »

В данном конкретном случае это излишне.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.156 секунд. Запросов: 23.