Окна сообщений QMessageBox


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

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

Тип окна выбирается в зависимости от обстоятельств. Окна могут содержать до трех кнопок.

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

{рис}

Окно сообщения можно реализовать следующим образом:


QMessageBox* pmbx =
                    new QMessageBox("MessageBox",
                    "<b>A</b> <i>Simple</i>   <u>Message</u>",
                    QMessageBox::Information,
                    QMessageBox::Yes,
                    QMessageBox::No,
                    QMessageBox::Cancel | QMessageBox::Escape);
int n = pmbx->exec(); 
delete pmbx; 
if (n == QMessageBox::Yes)
{
  //Нажата кнопка Yes 
}

Это окно создается динамически. В первом параметре конструктора передается текст заголовка окна, во втором параметре — текст сообщения, в котором можно использовать теги HTML. Третий параметр задает предопределенное растровое изображение, которое будет отображено слева.

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

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

Читать далее: Окна информационных сообщений в Qt