Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

02 {

03 QSettings settings("Software Inc.", "Spreadsheet");

04 settings.setValue("geometry", geometry);

05 settings.setValue("recentFiles", recentFiles);

06 settings.setValue("showGrid", showGridAction->isChecked);

07 settings.setValue("autoRecalc", autoRecalcAction->isChecked);

08 }

Функция writeSettings сохраняет «геометрию» окна (положение

и размер), список последних открывавшихся файлов и опции Show Grid (показать сетку) и Auto—Recalculate (автоматический повтор вычислений).

По умолчанию QSettings сохраняет настройки приложения в месте, которое зависит от используемой платформы. В системе Windows для этого используется системный реестр; в системе Unix данные хранятся в текстовых файлах; в системе Mac OS X для этого используется прикладной интерфейс задания установок Core Foundation Preferences.

В аргументах конструктора задаются название организации и имя приложения. Эта информация используется затем (причем по-разному для различных платформ) для определения места расположения настроек.

QSettings хранит настройки в виде пары ключ—значение. Здесь ключ подобен пути файловой системы. Подключи можно задавать, используя синтаксис, подобный тому, который применяется при указании пути (например, findDialog/matchCase), или используя beginGroup и endGroup:

settings.beginGroup("findDialog");

settings.setValue("matchCase", caseCheckBox->isChecked);

settings.setValue("searchBackward", backwardCheckBox->isChecked);

settings.endGroup;

Значение value может иметь типы int, bool, double, QString, QStringList или любой другой, поддерживаемый QVariant, включая зарегистрированные пользовательские типы.

01 void MainWindow::readSettings

02 {

03 QSettings settings("Software Inc.", "Spreadsheet");

04 QRect rect = settings.value("geometry",

05 QRect(200, 200, 400, 400)).toRect;

06 move(rect.topLeft);

07 resize(rect.size);

08 recentFiles = settings.value("recentFiles").toStringList;

09 updateRecentFileActions;

10 bool showGrid = settings.value("showGrid", true).toBool;

11 showGridAction->setChecked(showGrid);

12 bool autoRecalc = settings.value("autoRecalc", true).toBool;

13 autoRecalcAction->setChecked(autoRecalc);

14 }

Функция readSettings загружает настройки, которые были сохранены функцией writeSettings. Второй аргумент функции value

определяет значение, принимаемое по умолчанию в случае отсутствия запрашиваемого параметра. Принимаемые по умолчанию значения будут использованы при первом запуске приложения. Поскольку второй аргумент не задан для списка недавно используемых файлов, этот список будет пустым при первом запуске приложения.

Qt содержит функцию QWidget::setGeometry, которая дополняет функцию QWidget:: geometry, однако они не всегда работают должным образом в системе X11 из-за ограничений многих оконных менеджеров. По этой причине мы используем вместо них функции move и resize. (Подробную информацию по тому вопросу можно найти по адресу

Весь программный код MainWindow, относящийся к объектам QSettings, мы разместили в функциях readSettings и writeSettings; такой подход лишь один из возможных. Объект QSettings может создаваться для запроса или модификации каких-нибудь настроек в любой момент во время выполнения приложения и из любого места программы.

Теперь мы завершили построение главного окна MainWindow приложения Электронная таблица. В следующих разделах мы рассмотрим возможность модификации приложения Электронная таблица для обеспечения работы со многими документами и реализации экранных заставок. Мы завершим реализацию этих функций, в том числе обеспечивающих обработку формул и сортировку, в следующей главе.

Работа со многими документами

Теперь мы готовы написать функцию main приложения Электронная таблица:

01 #include <QApplication>

02 #include "mainwindow.h"

03 int main(int argc, char *argv[])

04 {

05 QApplication app(argc, argv);

06 MainWindow mainWin;

07 mainWin.show;

08 return app.exec;

09 }

Данная функция main немного отличается от написанных ранее: мы создали экземпляр MainWindow в виде переменной стека, а не использовали оператор new. Экземпляр MainWindow будет автоматически уничтожен после завершения функции.

При применении данной функции main приложение Электронная таблица обеспечивает вывод на экран только одного главного окна и позволяет работать только с одним документом. Если мы хотим одновременно редактировать несколько документов, нам придется запускать несколько приложений Электронная таблица. Но это будет не так удобно, как если бы один экземпляр приложения обеспечивал вывод на экран многих главных окон, подобно тому как один экземпляр веб-браузера позволяет просматривать одновременно несколько окон.

Поделиться:
Популярные книги

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Волкодав

Семёнова Мария Васильевна
1. Волкодав
Фантастика:
фэнтези
героическая фантастика
9.46
рейтинг книги
Волкодав

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Жена неверного ректора Полицейской академии

Удалова Юлия
Любовные романы:
любовно-фантастические романы
4.25
рейтинг книги
Жена неверного ректора Полицейской академии

Зодчий. Книга V

Погуляй Юрий Александрович
5. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга V

Я все еще граф. Книга IX

Дрейк Сириус
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я все еще граф. Книга IX

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Телохранитель Генсека. Том 2

Алмазный Петр
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Телохранитель Генсека. Том 2

Сапер

Вязовский Алексей
1. Сапер
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.29
рейтинг книги
Сапер

Развод в 45. От любви до ненависти

Гофман Крис
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Развод в 45. От любви до ненависти

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Российские фантасмагории (сборник)

Булгаков Михаил Афанасьевич
Юмор:
юмористическая проза
5.00
рейтинг книги
Российские фантасмагории (сборник)

Демон-хранитель

TsissiBlack
Фантастика:
фэнтези
мистика
5.20
рейтинг книги
Демон-хранитель

Наномашины, внучок! Том 2

Новиков Николай Васильевич
2. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, внучок! Том 2