Russian Qt Forum

Qt => Общие вопросы => Тема начата: izoomer от Январь 18, 2007, 00:08



Название: глобальные установки для всех классов
Отправлено: izoomer от Январь 18, 2007, 00:08
Подскажите, каким образом реализуется в QT-4.2 нижеописанная задача ?

Существуют некие глобальные установки различного формата - QString, int и др , в каждом классе проекта нужно иметь доступ к любой из установок. Первое что приходит на ум - это реализация через что то наподбие ini файла, но в этом случае придется считывать переменную при каждом нужном случае или создавать переменную в конструкторе класса . Может есть другие решения в QT?


Название: глобальные установки для всех классов
Отправлено: Sergeich от Январь 18, 2007, 00:17
Ищи инфу по паттерну Singleton


Название: глобальные установки для всех классов
Отправлено: Dendy от Январь 18, 2007, 00:49
В классе хранишь указатель на екземпляр установок. Установки живут пока живут остальньІе классьІ юзающие их. Другой способ - у екземплятов классов иметь информацию о родителе, через которьІй можно получить установки. Можно еще хранить ключ, через которьІй получать установки из синглтона. ОптимальньІй обьектно-ориентированньІй способ - когда каждьІй екземпляр твоего класса независим от остальной части программьІ, а нужньІе ему настройки он хранит в себе статической копией (или в Implicitly Shared классе).


Название: глобальные установки для всех классов
Отправлено: Alex03 от Январь 18, 2007, 10:51
ИМХО всё же бывают случаи когда использование глобольных переменных не так уж и плохо/нельзя_ни_за _что! :)

Не хотите совсем глобальную переменную, засунте свои настройки в QMyApplication и пользуйте через:
((QMyApplication*)qApp)->getXXX()
а то и от qApp напрямую доступ к членам (не приветствуется).


Название: глобальные установки для всех классов
Отправлено: bigirbis от Январь 18, 2007, 12:45
А еще можно пронаследовать класс от QObject и сделать его чайлдом QApplication. Ну и статику написать для поиска данного экземпляра...


Название: глобальные установки для всех классов
Отправлено: Maz от Январь 18, 2007, 14:24
Почему бы не использовать QSetting. Создать экземпляр класса при загрузке программы и его использовать во всех остальных классах. После завершения программы удалять экземпляр. В классе, в котором создавался этот экземпляр сделать статическую ссылку на экземпляр. Таким образом из любого класса можно обратиться к настройкам.
Еще QSettings желательно настроить на формат INI файла или xml.


Название: глобальные установки для всех классов
Отправлено: izoomer от Январь 19, 2007, 00:02
каковы преимущества недостатки разных из предложенных способов - обект от QObject или QSetting, или другое ?
что требует меньше кода и интуитивно понятно для использования ?


Название: глобальные установки для всех классов
Отправлено: Dendy от Январь 19, 2007, 00:31
QSettings - легкая обертка над настройками программьІ, что должньІ использоваться от запуска к запуску программьІ, ето способ сохранять и загружать данньІе на диск. QObject сюда вообще неприменим - нарушение обьектной модели, избьІточность, QObject отражает уникальньІй обьект в системе, а не разделяемьІе данньІе настроек. НужньІ синглтоньІ. Сложно сказать как организовать твои настройки, нужно больше информации. Что за задача, конкретнее?


Название: глобальные установки для всех классов
Отправлено: bigirbis от Январь 19, 2007, 11:13
На самом деле QSettings наследует QObject. Просто потом лень писать было. :) А вообще, вобщем случае QSettings предпочтительнее. Но иногда выгоднее хранить данные в структурах, которые потом сохранять в бинарный файл.