Similar presentations:
Реализация сохранения настроек. Урок 1
1.
Реализация сохранениянастроек
Бушкиев Церен Юрьевич
[email protected]
2.
Класс QSettingsФорматы конструктора класса QSettings:
1. <Объект> = QSettings([parent=None])
2. <Объект> = QSettings(<Название организации>[, application=""][,
parent=None])
3. <Объект>
=
QSettings(<Диапазон>,
<Название
организации>[,
application=""][, parent=None])
4. <Объект>
=
QSettings(<Тип
хранилища>,
<Диапазон>,
<Название
организации>[, application=""][, parent=None])
5. <Объект> = QSettings(<Путь к файлу или ключу Реестра>, <Тип
хранилища>[, parent=None])
3.
Класс QSettingsПервый формат — самый простой. Он лишь позволяет указать родителя,
присвоив его необязательному параметру parent. При этом настройки
будут храниться на уровне текущего пользователя в реестре Windows.
Чтобы настройки успешно сохранились, понадобится задать названия
организации и приложения, и сделать это нужно еще до создания
экземпляра класса QSettings. В этом нам помогут следующие два
статических метода класса QCoreApplication из модуля QtCore:
setOrganizationName(<Название
организации>)
—
задает
<Название
приложения>)
—
задает
<Название
организации>;
setApplicationName(<Название
приложения>.
4.
Класс QSettingsВторой формат позволяет сразу задать <Название организации> —
разработчика приложения. В необязательном параметре application
можно указать название приложения. Настройки также будут храниться
на уровне текущего пользователя в реестре Windows.
В третьем формате мы можем задать <Диапазон> хранения настроек, т.
е. указать, будут ли они храниться на уровне текущего пользователя
или на уровне системы (относиться ко всем зарегистрированным в
системе пользователям).
<Диапазон> указывается в виде одного из следующих атрибутов класса
QSettings:
UserScope — 0 — хранение настроек на уровне текущего пользователя;
SystemScope
—
1
—
хранение
настроек
на
уровне
настройки тоже будут храниться в реестре Windows.
системы. Эти
5.
Класс QSettingsЧетвертым
задать
форматом
<Тип
конструктора
хранилища>.
Задается
используется
в
виде
если
одного
нужно
из
явно
следующих
атрибутов класса QSettings:
1. NativeFormat — 0 — реестр Windows: его 32-разрядная копия, если
приложение работает под управлением 32-разрядной редакции
Python, и 64-разрядная — для 64-разрядной редакции языка;
2. IniFormat — 1 — INI-файл;
Registry32Form at — 2 — для 64разрядных приложений — 32-разрядная копия реестра, для 32разрядных приложений аналогичен атрибуту NativeFormat;
3.
Registry64Format
—
3
—
для
32-разрядных
приложений,
запущенных под 64-разрядной Windows, — 64-разрядная копия реестра,
для 32-разрядных приложений, работающих под 64-разрядной Windows, и
64-разрядных приложений аналогичен NativeFormat.
6.
Класс QSettingsПятый формат позволяет напрямую указать <Путь к файлу или ключу
реестра>,
где
хранятся
настройки
(в
частности,
этот
формат
пригодится нам в случае, если нужно прочитать какие-либо системные
настройки).
В
качестве
параметра
<Тип
хранилища>
следующих атрибутов класса QSettings:
NativeFormat — 0 — реестр;
IniFormat — 1 — INI-файл.
следует
указать
один
из
7.
Методы QSettings• organizationName() — возвращает название организации;
• applicationName() — возвращает название приложения;
• scope() — возвращает обозначение диапазона;
• format() — возвращает обозначение формата хранения настроек;
• fileName() — возвращает путь к ключу реестра или INI-файлу c
настройками.
8.
Методы QSettingsСоздав
экземпляр
класса
QSettings,
мы
можем
приступить
к
сохранению настроек или чтению их.
Для выполнения простейших операций по записи и чтению данных класс
QSettings предоставляет следующие методы:
setValue(<Имя
значения>,
<Значение>)
—
записывает
заданное
<Значение> под указанным в виде строки параметром <Имя значения>.
<Значение> может быть любого типа;
value(<Имя
считывает
значения>[,
значение,
defaultValue=None][,
указанное
параметром
возвращает его в качестве результата.
<Имя
type=None])
—
значения>,
и
9.
Методы QSettingsremove(<Имя значения>) — удаляет значение, указанное параметром
<Имя значения>. Если в качестве параметра была передана пустая
строка, будут удалены все значения, что находятся в хранилище;
contains(<Имя
указанное
значения>)
параметром
<Имя
—
возвращает
значения>,
True,
если
существует,
и
значение,
False
—
в
противном случае;
childKeys()
—
возвращает
список
имен
имеющихся
в
хранилище
значений;
clear() — удаляет все значения из хранилища;
sync()
—
выполняет
принудительную
хранилище изменений в реестр или файл.
запись
всех
выполненных
в
10.
ЗадачаНапишем
приложение,
которое
записывает
в
хранилище
настроек (поскольку формат хранения не задан, в качестве
хранилища выступает реестр) число, строку и экземпляр
класса QSize.
Далее
выводит
оно
их
хранилище
считывает
все
на
и
экран
настроек
сохраненные
проверяет,
значение,
сохранялось.
В конце очищает хранилище.
ранее
значения,
присутствует
которое
заведомо
ли
в
там
не
11.
Ключи для группировки записываемых вхранилище значений
Простой способ заключается в том, что в первом параметре метода
setValue() перед именем значения через слэш «/»
передается имя
ключа:
settings.setValue("Ключ 1/Значение 1", v1)
...
lv1 = settings.value("Ключ 1/Значение 1")
Ключи можно вкладывать внутрь других ключей:
settings.setValue("Ключ 2/Вложенный ключ 1/Значение 4", v4)
...
lv4 = settings.value("Ключ 2/ Вложенный ключ 1/Значение 4")
12.
Ключи для группировки записываемых вхранилище значений
Сложный
способ
(который
на
самом
деле
не
так
уж
и
сложен)
пригодится, если нам нужно сохранить в одном ключе сразу несколько
значений или же прочитать ряд значений из одного и того же ключа.
Для его реализации следует выполнить следующие шаги:
1. Вызвать метод beginGroup(<Имя или путь ключа>) класса QSettings.
В качестве параметра методу передается имя ключа, к содержимому
которого
следует
обратиться,
или
же
целый
создать вложенный ключ:
settings.beginGroup("Ключ 1")
settings.beginGroup("Ключ 2/Вложенный ключ 1")
«путь»,
если
нужно
13.
Ключи для группировки записываемых вхранилище значений
2. Выполнить запись или чтение нужных значений с помощью знакомых
нам методов setValue() и value(). В этом случае значения будут
записаны
в
ключ,
указанный
в
предыдущем
вызове
метода
beginGroup(), или же прочитаны из этого ключа.
3. Вызвать метод endGroup() класса QSettings.
Использование
методов
beginGroup()
и
endGroup()
имеет
ряд
особенностей, о которых нам обязательно следует знать.
1.
Методы remove(), contains() и childKeys(), если их вызовы
помещены между вызовами упомянутых ранее методов, действуют только
внутри указанного в вызове метода beginGroup() ключа. Так, метод
contains()
будет
текущем ключе.
искать
значение
с
указанным
именем
только
в
14.
Ключи для группировки записываемых вхранилище значений
2.
Вызов метода remove() с передачей ему в качестве параметра
пустой строки удалит все значения, сохраненные в текущем ключе, не
затрагивая содержимое других ключей и «корня» хранилища.
3.
Список, возвращаемый методом childKeys(), будет включать не
только имена значений, но и имена всех ключей, вложенных в текущий
ключ.
4.
Для
использовать
проверки
метод
существования
contains(),
какого-либо
вызвав
его
в
ключа
ключе
можно
предыдущего
уровня или же в «корне» хранилища, если ключ никуда не вложен.
5.
Для удаления ключа можно использовать метод remove(), который
в этом случае вызывается точно так же.
15.
Методы QSettingsПри использовании ключей для группировки записываемых в хранилище
значений
нам
могут
пригодиться
три
следующих
метода
класса
QSettings:
• group() — возвращает строку с именем или путем текущего ключа;
• childGroups() — возвращает список с именами всех ключей, что
имеются в текущем;
• allKeys() — возвращает список полных путей ко всем значениям,
что имеются в хранилище, включая значения, которые сохранены в
ключах.
16.
ЗадачаНапишем
код
местоположение
приложения,
при
чье
завершении
окно
и
сохраняет
восстанавливает
свое
при
запуске.
Помимо этого, при нажатии специальной кнопки выполняется
сохранение
текста,
занесенного
пользователем
в
поле
ввода.
Местоположение
разных группах.
окна
и
введенный
текст
сохраняются
в
17.
ЗадачаНапишите функцию Python, которая принимает положительное
целое число и возвращает сумму куба всех положительных
целых чисел, меньшую, чем указанное число.
18.
Домашнее заданиеДобавить
в
программу
из
прошлого
возможность сохранения настроек
ДЗ
19.
Спасибоза внимание
Бушкиев Церен Юрьевич