Шаг 142.
Библиотека Qt.
Диалоговые окна сообщений

    На этом шаге рассмотрим диалоговые окна сообщений.

    Диалоговые окна для вывода сообщений на экран обеспечивает класс QMessageBox. Диалоговое окно сообщения — это самое простое диалоговое окно, которое отображает текстовое сообщение и ожидает реакции со стороны пользователя. Его основное назначение состоит в информировании пользователя об определенном событии.

    Все окна, предоставляемые классом QMessageBox, — модальные. Они могут содержать кнопки, заголовок и текст сообщения.

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

    Окна могут содержать до трех кнопок. Это очень удобно, т. к. не нужно писать дополнительного кода для реализации вывода сообщения. Можно применять такие окна для отладочных целей — вывести необходимую информацию и приостановить выполнение программы. Окно сообщения, показанное на рис. 1, можно реализовать следующим образом:


Рис.1. Диалоговое окно сообщения

QMessageBox* pmbx = new QMessageBox(QMessageBox::Information,
                                    "Окно сообщения",
                                    "<b>Пример</b> <i>простого</i> <u>сообщения</u>",
                                    QMessageBox::Yes | QMessageBox::No |
                                    QMessageBox::Cancel
);
int n = pmbx->exec();
delete pmbx;
if (n == QMessageBox::Yes) {
//Нажата кнопка Yes
}

    Файлы приложения можно взять здесь.

    Это окно создается динамически. Первый параметр задает предопределенное растровое изображение, которое будет отображено слева (табл. 1). Во втором параметре конструктора передается текст заголовка окна, во втором — текст сообщения, в котором можно использовать теги HTML. Третий параметр задает кнопки, которые будут размещены в диалоговом окне (табл. 2), этот параметр необязателен, и если его не указать, то диалоговое окно будет содержать только лишь одну кнопку OK.

Таблица 1. Растровые изображения
Константа
Значение
Вид
NoIcon
0
 
Information
1
Warning
2
Critical
3
Question
4

Таблица 2. Перечисление констант класса QMessageBox
Константа
Константа
Константа
NoButton No NoAll
Yes YesAll Ok
Default Retry Ignore
Cancel Abort Escape

    В нашем примере мы определили три кнопки Yes, No и Cancel. Следует обратить ваше внимание на то, что всегда в подобных случаях нужно обязательно определять кнопку Cancel (Отмена). Клавиша Escape часто нажимается пользователями для отмены действия и диалоговое окно в этом случае должно возвратить результат нажатия кнопки Cancel. Четвертый и пятый параметр не обязательны и в них можно передать указатель на виджет предка и флаги, управляющие внешним видом диалогового окна. Вызов метода exec() объекта класса QMessageBox приводит к остановке приема событий основной программы и ожиданию нажатия на одну из кнопок окна сообщения. После нажатия метод exec() возвращает идентификатор кнопки, который сохраняется в переменной n. Оператор delete удаляет из памяти виджет окна сообщения. В операторе if проверяется значение нажатой кнопки на равенство значению кнопки Yes (Да).

    Параметры, передаваемые в конструктор, можно установить и с помощью методов, определенных в классе QMessageBox. Текст сообщения устанавливается методом setText(), а текст кнопки — методом setButtonText(). Первым параметром в метод setButtonText() необходимо передать один из целочисленных идентификаторов, приведенных в табл. 2, вторым — текст. При помощи метода setWindowTitle() устанавливается текст заголовка окна. Метод setIcon() устанавливает растровое изображение, для этого нужно передать в него одну из констант, указанных в табл. 1. Если приведенных в этой таблице растровых изображений недостаточно, то можно создать и установить свое собственное, передав объект класса QPixmap в метод setIconPixmap().

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




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