Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225

Как организовать хранение ключей QSettings?

14.02.2015, 18:56. Показов 5793. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! QSettings стал использоваться у меня во многих местах в программе и надоело каждый раз вводить повторяющиеся ключи и группы. Думал завести много констант, которые будут хранить ключи, однако может есть более лучший и проверенный способ? Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2015, 18:56
Ответы с готовыми решениями:

QSettings, ini, возможно ли хранение многострочного текста?
Доброго времени суток. Собственно, сабж. Спасибо

Как организовать хранение паролей от mysql?
дело в том что не как не могу сообразить организовать программу. то есть при первом запуске программа должна попросить пароль от mysql и...

Как организовать хранение увеличивающихся данных - список списков?
Хочу написать программу, решающую пятнашки. В сети нашёл исходники аж 2 шт, оба работают неудовлетворительно, а именно - виснут при...

49
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Чем же. Стандартная языковая конструкция для объявления переменных с не прямой инициализацией.
Макросы тоже языковая конструкция.

Добавлено через 1 минуту
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Ну так у нас задача хранить ключи настроек в одном месте в одном экземпляре. У вас есть другие предложения?
Цитата Сообщение от Avazart Посмотреть сообщение
Собственно если говорить о пользовательских типах то- синглитон.
Но лично я не вижу смысла в самой постановке задачи.
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 21:22
Цитата Сообщение от Avazart Посмотреть сообщение
Макросы тоже языковая конструкция.
1) дефайны изначально нужны были потому, что в С нет const
2) Я выше уже написал что вариант с дефайнами будет медленнее. То есть страдает производительность.

Цитата Сообщение от Avazart Посмотреть сообщение
Но лично я не вижу смысла в самой постановке задачи.
Вы не можете представить случай когда программа должна хранить глобальные переменные?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:25
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Вы не можете представить случай когда программа должна хранить глобальные переменные?
Могу - кривая реализация.

Добавлено через 1 минуту
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Чем они глобальные, они же в своем namespace. Да и для ключей настроек других вариантов и нету.
Я лишь предложил самый эффективный метод для этого, и это extern.
Кстати а как вы собрались использовать namespacе и extern вместе?
Я лично не разу не встречал такого в коде, и чет не могу представить себе это.
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 21:35
Цитата Сообщение от Avazart Посмотреть сообщение
Могу - кривая реализация.
Есть приложение с диалогом настроек.
Соответственно у нас есть 3-и места где мы вызываем настройки:
1) При открытии диалога настроек.
2) При закрытии диалога настроек.
3) В самой программе, когда проверяем нужный нам параметр.
Ваши предложения? Во всех трех случаях писать строку с именем параметра из ini? А если мне завтра нужно будет в нем одну букву поменять - менять и во всех других частях программы? Как-то не очень удобно, можно и забыть.

Цитата Сообщение от Avazart Посмотреть сообщение
Кстати а как вы собрались использовать namespacе и extern вместе?
А какие проблемы. Я не собрался, а даже использую. И не только я. Это стандартнейшая практика, как минимум в Qt приложениях.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:41
Цитата Сообщение от RazrFalcon Посмотреть сообщение
А какие проблемы. Я не собрался, а даже использую. И не только я.
Может продемонстрируете код?
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Это стандартнейшая практика, как минимум в Qt приложениях.
Где это можно увидеть?

Цитата Сообщение от RazrFalcon Посмотреть сообщение
Есть приложение с диалогом настроек.
Соответственно у нас есть 3-и места где мы вызываем настройки:
1) При открытии диалога настроек.
2) При закрытии диалога настроек.
3) В самой программе, когда проверяем нужный нам параметр.
Ваши предложения? Во всех трех случаях писать строку с именем параметра из ini? А если мне завтра нужно будет в нем одну букву поменять - менять и во всех других частях программы? Как-то не очень удобно, можно и забыть.
Ну и в чем проблема хранить настройки локально как член-класса владельца диалога?
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 21:44
Цитата Сообщение от Avazart Посмотреть сообщение
Может продемонстрируете код?
3-е сообщение в этой теме.
Цитата Сообщение от Avazart Посмотреть сообщение
Где это можно увидеть?
Ну так сходу не найду.
Цитата Сообщение от Avazart Посмотреть сообщение
Ну и в чем проблема хранить настройки локально как член-класса владельца диалога?
Мы сейчас вообще об одном и том же говорим? Тема о QSettings.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:44
Цитата Сообщение от gromo Посмотреть сообщение
Всем привет! QSettings стал использоваться у меня во многих местах в программе и надоело каждый раз вводить повторяющиеся ключи и группы. Думал завести много констант, которые будут хранить ключи, однако может есть более лучший и проверенный способ? Спасибо!
Собственно основной вопрос зачем плодить переменные, если они как бы уже и так "внутри" QSettings есть?
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 21:50
Цитата Сообщение от Avazart Посмотреть сообщение
Собственно основной вопрос зачем плодить переменные, если они как бы уже и так "внутри" QSettings есть?
Вопрос бы про ключи...

QSettings обычно используется так:
C++ (Qt)
1
2
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "MyApp", "MyApp")
qDebug() << settings.value("GUI/SplitterSize");
Вот ТС и спрашивает как лучше хранить "GUI/SplitterSize" глобально, а не писать каждый раз.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Где это можно увидеть?
Примеры самого Blackberry:
http://blackberry.github.io/Ca... s-cpp.html
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:54
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Вот ТС и спрашивает как лучше хранить "GUI/SplitterSize" глобально, а не писать каждый раз.
А смысл ? Что бы писать так:

C++ (Qt)
1
2
3
4
сonst QString guiSection= "GUI";
const QString splitterName= "Splitter";
const QString sizeValue= "Size";
qDebug() << settings.value(guiSection+"/"+splitterName+sizeValue);
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 21:57
Цитата Сообщение от Avazart Посмотреть сообщение
Что бы писать так:
Что бы писать так:
C++ (Qt)
1
qDebug() << settings.value(SettingKey::GUI::SplitterSize);
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 21:58
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Примеры самого Blackberry:
http://blackberry.github.io/Ca... s-cpp.html
Чет тут http://blackberry.github.io/Ca... s-hpp.html не наблюдаю extern нигде, да и пространство безымянное, в общем не то...
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 22:00
Цитата Сообщение от Avazart Посмотреть сообщение
Чет тут http://blackberry.github.io/Ca... s-hpp.html не наблюдаю extern нигде, да и пространство безымянное, в общем не то...
Дык это простой пример, когда ключи нигде кроме одного класса не используются. Но логика та же.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 22:01
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Что бы писать так:
Ну допустим зачем тут экстерн?
Объяви эту константу членом класса виджета где используется QSettings и делов то?

Добавлено через 34 секунды
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Дык это простой пример, когда ключи нигде кроме одного класса не используются. Но логика та же.
Стоп, мы говорили именно про extern+namespace.
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 22:06
Цитата Сообщение от Avazart Посмотреть сообщение
Ну допустим зачем тут экстерн?
SettingKey::GUI::SplitterSize может использоваться по всех проге. По этому нам проще его создать один раз, и потом просто использовать где надо.

Цитата Сообщение от Avazart Посмотреть сообщение
Объяви эту константу в членом класса и делов то?
Какого класса, наследника QSettings?

Цитата Сообщение от Avazart Посмотреть сообщение
Стоп, мы говорили именно про extern+namespace.
Да.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 22:09
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Какого класса, наследника QSettings?
Цитата Сообщение от Avazart Посмотреть сообщение
членом класса виджета где используется QSettings
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Да.
Что да? Ссылка на левый код...
Цитата Сообщение от RazrFalcon Посмотреть сообщение
SettingKey::GUI::SplitterSize может использоваться по всех проге. По этому нам проще его создать один раз, и потом просто использовать где надо.
Ну если это так то стоит переписывать прогу. И делать константы тем же уровнем что и QSettings, но никак не "выше".
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 22:15
Цитата Сообщение от Avazart Посмотреть сообщение
Что да? Ссылка на левый код...
WUT? Вы про ссылку на доку блекбери? Я же написал что так сходу не найду.
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если это так то стоит переписывать прогу.
С чего это вдруг?

Цитата Сообщение от Avazart Посмотреть сообщение
И делать константы тем же уровнем что и QSettings, но никак не "выше".
В данном случае разницы 0.
Да и namespace нельзя вкладывать в class, что делает использование таких переменных неудобным.


Мне интересно как вы взаимодействуете с конфигами в ваших приложениях?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 22:23
Цитата Сообщение от RazrFalcon Посмотреть сообщение
С чего это вдруг?
По тому что кривой скорее всего.

Цитата Сообщение от RazrFalcon Посмотреть сообщение
В данном случае разницы 0.
Разница в локализации переменный, а этому всегда уделяется время в нормальном коде.
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Да и namespace нельзя вкладывать в class,
Так и смысла в неймспейсах тогда нет.
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Мне интересно как вы взаимодействуете с конфигами в ваших приложениях?
Так и взаимодействую:
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если это так то стоит переписывать прогу. И делать константы тем же "уровнем" что и QSettings, но никак не "выше".
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
сlass MainWidget
{
    
    private:
       QSetting settings;
       const SplitterSize;
       // ...
}
Ну или c группировкой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
сlass MainWidget
{
    private:
   
       struct 
       {
           QSetting settings;
           const QString splitterSize;
           // ...
       } guiSettings;
       // ...
}
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.02.2015, 22:35
Цитата Сообщение от Avazart Посмотреть сообщение
Разница в локализации переменный, а этому всегда уделяется время в нормальном коде.
У нас класс настроек глобальный и используется в большинстве классов. Какая разница будут переменные внутри наследника QSettings или в namespace? Правильно - ровно никакой. Да и кто вообще хранит глобальные переменные внутри класса?!

В вашем примере SplitterSize невидим для других классов. Да, конкретно этот ключ можно и локально хранить, но есть которые используются глобально. Как я уже писал выше, банальный пример - это диалог настроек. Что есть вам нужно будет этот самый SplitterSize из настроек задавать?

То что вы предлагаете - чисто вкусовщина. Ни одной проблемы с моим кодом нет. Он не засоряет глобальное пространство. Он быстро работает. Он улучшает рефайкторинг. Одни плюсы.
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
15.02.2015, 22:39  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Кстати а как вы собрались использовать namespacе и extern вместе?
Я лично не разу не встречал такого в коде, и чет не могу представить себе это.
Курить раздел 3.5 Program and Linkage, в частности 3.5 /7


Цитата Сообщение от Avazart Посмотреть сообщение
В принципе да для QString вряд ли возможна какая-то оптимизация.
А как же создание QString в compile time? QStringLiteral в помощь.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 22:48
Цитата Сообщение от gromo Посмотреть сообщение
Курить раздел 3.5 Program and Linkage, в частности 3.5 /7
А при чем тут это, я про то что нигде не видел такого в нормально коде.
Цитата Сообщение от gromo Посмотреть сообщение
А как же создание QString в compile time? QStringLiteral в помощь.
Хз... не могу ничего сказать точно.

Добавлено через 2 минуты
Цитата Сообщение от RazrFalcon Посмотреть сообщение
внутри наследника QSettings
Какой еще наследник QSettings ?

Добавлено через 1 минуту
Цитата Сообщение от RazrFalcon Посмотреть сообщение
В вашем примере SplitterSize невидим для других классов.
А он и не должен быть виден там где он не используется, в этом и суть локализации.

Добавлено через 1 минуту
Цитата Сообщение от RazrFalcon Посмотреть сообщение
То что вы предлагаете - чисто вкусовщина. Ни одной проблемы с моим кодом нет. Он не засоряет глобальное пространство. Он быстро работает. Он улучшает рефайкторинг. Одни плюсы.
Бантика не хватает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2015, 22:48

Как организовать хранение списка путей?
Задача заключается в том чтобы по нажатию кнопки сделать бэкап родных файлов, и заменить их (File.Copy) файлами из другой папки. Дело в том...

Как организовать хранение изображений на сервере?
Всем привет. Есть доска объявлений, в которой пользователи загружают фотографии. Как эти фотографии лучше всего размещать? В одной...

Как организовать хранение информации об игроках?
Здравствуйте! Ребят, есть задумка, но вот если с одиночными играми все более-менее понятно, то как сделать чтобы при запуске мобильного...

Как лучше организовать хранение данных?
Всем доброго времени суток. Есть необходимость хранения в базе 500 чисел. Числа поступают в большом количестве, но нужны только 500...

Как правильно организовать хранение данных?
Добрый день! Прошу совета. Есть база Mysql. Есть класс типа Машина В него входит несколько подклассов (Модель, Цвет, Параметры). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru