
37 Вопрос
Класс QDialog является базовым классом для диалоговых окон.
Диалоговое окно - это окно верхнего уровня, предназначенное, главным образом, для выполнения коротких задач и непродолжительных взаимодействий с пользователем. QDialogs может быть модальным или не модальным. QDialogs поддерживает расширяемость и может предоставлять возвращаемое значение. Диалоговые окна имеют кнопку по умолчанию. QDialog также может иметь QSizeGrip в правом-нижнем углу (настраивается с использованием setSizeGripEnabled()).
Обратите внимание, что QDialog использует родительский виджет немного иначе, чем другие классы Qt. Диалог - всегда виджет верхнего уровня, но если он имеет родителя, то по умолчанию он расположен поверх и по центру родительского виджета (если он сам не виджет верхнего уровня). Он также доступен через панель задач родителя.
Модальные Диалоги
Модальный диалог - это диалог, который блокирует ввод в другие окна своего приложения. Пользователь должен завершить работу с диалогом и закрыть его прежде, чем получит доступ к другим окнам приложения. Диалоги, запрашивающие указание пользователем имени файла и устанавливающие настройки приложения, обычно модальны.
Обычно, модальный диалог отображается с помощью вызова функции exec(). При закрытии пользователем диалога, exec() для удобства предоставляет возвращаемое значение. Обычно, для закрытия диалога и получения соответствующего вначения, соединяют сигнал кнопки по умолчания, например, "OK", со слотом accept(), а кнопки "Cancel" со слотомreject(). В качестве альтернативы, Вы можете вызвать слот done() с Accepted или Rejected.
Также можно вызвать setModal(true) или setWindowModality(), а затем show(). В отличие от exec(), show() немедленно возвращает управления вызывающему. Вызов setModal(true) особенно полезен для диалогов, содержащих полосу прогресса, диалогов, которые должны имень возможность взаимодействия с пользователем (например, для отмены долгой операции). Если Вы используете show() совместно с setModal(true) то периодически, в течение обработки, должны вызывать QApplication::processEvents() для обеспечения возможности взаимодействия с пользователем. (См. QProgressDialog.)
Немодальные Диалоги
Немодальный диалог - это диалог, работающий независимо от других окон этого приложения. Диалоги поиска и замены в текстовых редакторов часто немодальны, что позволяет взаимодействовать и с главным окном приложения и с диалогом.
Немодальные диалоги отображаются с использованием функции show(), которая немедленно возвращает управление вызывающему.
Кнопка по Умолчанию
Кнопка диалога по умолчанию - это кнопка, которая нажимается при нажатии пользователем клавиши клавиатуры Enter (Return). Данная кнопка используется для указания того, что пользователь принимает установки диалога и хочет закрыть диалог. Для настройки кнопки по умолчанию используются QPushButton::setDefault(), QPushButton::isDefault() иQPushButton::autoDefault().
Клавиша Escape
Если пользователь нажимает клавишу Esc в диалоге, то вызывается QDialog::reject(). Это заставляет окно закрыться: Сообщение о закрытии может быть игнорировано.
Расширяемость
Расширяемость - это возможность отобразить диалог двумя способами: отображение части диалога, содержащей наиболее часто используемые опции, и оторажение полного диалога, содержащего все опции. Обычно, сперва отображается часть расширяемого диалога, содержащего фиксируемую кнопку "More". Если пользователь нажимает кнопку "More", то отображается полный диалог. Расширяемый виджет изменяет размеры в своем sizeHint(). Если его ориентация равна Qt::Horizontal то height() расширяемого виджета увеличится доheight() диалога. Если ориентация равна Qt::Vertical, то width() расширяемого виджета увеличится до width() диалога. Расширяемость управляется с помощью setExtension(),setOrientation() и showExtension().