Читаем QT 4: программирование GUI на С++ полностью

Этот подход является зеркальным отражением первого: вместо знания вызывающим компонентом характерных особенностей диалогового окна теперь само диалоговое окно должно иметь представление об особенностях структур данных, передаваемых вызывающим компонентом. Этот подход полезно применять, когда диалоговому окну требуется отслеживать изменения. В то время как при первом подходе ненадежен код вызвавшего компонента, третий подход перестает работать при изменении структуры данных.

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

Мы завершим данный раздел созданием диалогового окна About (справка о программе). Мы могли бы создать для представления данных о программе специальное диалоговое окно наподобие созданных нами ранее Find или Go-to-Cell, но поскольку диалоговые окна About сильно стилизованы, в средствах разработки Qt предусмотрено простое решение:

01 void MainWindow::about()

02 {

03 QMessageBox::about(this, tr("About Spreadsheet"),

04 tr("

Spreadsheet 1.1

"

05 "

Copyright © 2006 Software Inc."

06 "

Spreadsheet is a small application that "

07 "demonstrates QAction, QMainWindow, QMenuBar, "

08 "QStatusBar, QTableWidget, QToolBar, and many other "

09 "Qt classes."));

10 }

Рис. 3.15. Справка о приложении Электронная таблица.

Диалоговое окно About получается путем вызова удобной статической функции QMessageBox::about(). Эта функция очень напоминает функцию QMessageBox::warning(), однако здесь вместо стандартных «предупреждающих» пиктограмм используется пиктограмма родительского окна.

Таким образом, мы уже сумели воспользоваться несколькими удобными статическими функциями, определенными в классах QMessageBox и QFileDialog. Эти функции создают диалоговое окно, инициализируют его и вызывают для него функцию exec(). Кроме того, вполне возможно, хотя и менее удобно, создать виджет QMessageBox или QFileDialog так же, как это делается для любого другого виджета, и явно вызвать для него функцию exec() или даже show().

<p>Сохранение настроек приложения</p>

В конструкторе MainWindow мы уже вызывали функцию readSettings() для загрузки сохраненных приложением настроек. Аналогично в функции closeEvent() мы вызывали writeSettings() для сохранения настроек. Эти функции являются последними функциями—членами MainWindow, которые необходимо реализовать.

01 void MainWindow::writeSettings()

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.

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных