Шаг 133.
Библиотека Qt.
Класс QDialog

    На этом шаге рассмотрим класс QDialog.

    Класс QDialog является базовым для всех диалоговых окон, представленных в классовой иерархии Qt. Хотя диалоговое окно можно создавать при помощи любого виджета, сделав его виджетом верхнего уровня, тем не менее удобнее воспользоваться классом QDialog, который предоставляет ряд возможностей, необходимых всем диалоговым окнам. Диалоговые окна подразделяются на две группы:

    Режим модальности и немодальности можно установить, а также определить при помощи методов QDialog::setModal() и QDialog::isModal() соответственно. Значение true означает модальный режим, а false — немодальный.

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

    Для блокировки приложения запускается цикл события только для диалогового окна, а остальные события клавиатуры, мыши и других элементов приложения просто игнорируются. Этот цикл запускается вызовом слота exec(), который возвращает значение целого типа после закрытия диалогового окна. Это значение информирует о нажатой кнопке и может равняться QDialog::Accepted или QDialog::Rejected, что соответствует кнопкам Ok и Cancel (Отмена). Типичным примером модального окна является напоминание пользователю о необходимости сохранения документа перед закрытием приложения. В момент отображения этого окна возможность работы с самим приложением должна быть заблокирована. Принцип вызова модального диалогового окна примерно следующий:

MyDialog* pdlg = new MyDialog(&data);
if (pdlg->exec() == QDialog::Accepted) {
   // Пользователь выбрал Accepted
   // Получить данные для дальнейшего анализа и обработки
   Data data = pdlg->getData();
   ...
}
delete pdlg;

    Немодальные диалоговые окна ведут себя как нормальные виджеты, не прерывая при своем появлении работу приложения. Немодальное окно может быть отображено с помощью метода show(), как и обычный виджет. Метод show() не возвращает никаких значений и не останавливает выполнение всей программы. Метод hide() позволяет сделать окно невидимым. Этой возможностью можно воспользоваться, чтобы не создавать каждый раз объект диалогового окна и не удалять его из памяти при закрытии. Если ограничиться вызовом методов show() и hide(), это даст возможность отображать диалоговое окно на том же месте, на котором оно было скрыто. Немодальные диалоговые окна необходимо снабжать кнопкой Close (Закрыть) для того, чтобы дать возможность пользователю закрыть его.

    На следующем шаге рассмотрим создание собственного диалогового окна.




Предыдущий шаг Содержание Следующий шаг