Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

Диалоговые окна

До сих пор вы создавали подклассы

QMainWindow
для построения своих интерфейсов. Объекты
QMainWindow
предназначены для создания главного окна в вашем приложении, но для кратковременных диалоговых окон следует рассмотреть виджет
QDialog
.

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

QDialog
, поскольку вы получаете удобные методы формирования диалогового окна и специализированные сигналы и слоты для обработки ответов пользователя.

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

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

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

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

QApplication::processEvents
.

QDialog

QDialog
— базовый класс диалоговых окон в Qt, предоставляющий методы
exec
и
show
для обработки модальных и немодальных диалоговых окон, у него есть встроенный класс
QLayout
, который можно использовать, и несколько сигналов и слотов, полезных для формирования откликов на нажатие кнопки.

Обычно вы будете создавать для своих диалоговых окон класс-потомок

QDialog
и вставлять в него виджеты для создания интерфейса диалогового окна:

#include <qdialog.h>

MyDialog::MyDialog(QWidget *parent, const char *name) : QDialog(parent, name) {

 QHBoxLayout *hbox = new QHBoxLayout(this);

 hbox->addWidget(new Qlabel("Enter your name"));

 hbox->addWidget(new QLineEdit);

 hbox->addWidget(ok_pushbutton);

 hbox->addWidget(cancel_pushbutton);

 connect(ok_pushbutton, SIGNAL(clicked), this, SLOT(accept));

 connect(cancel_pushbutton, SIGNAL(clicked), this, SLOT(reject));

}

В отличие от виджета типа

QMainWindow
вы можете задать объект
MyDialog
как родительский для своего объекта
QLayout
без создания пустого
QWidget
в качестве родительского.

Примечание

Имейте в виду, что в этом примере пропущен программный код для создания виджетов

ok_pushbutton
и
cancel_pushbutton
.

У объекта

QDialog
есть два слота —
accept
и
reject
, которые применяются для обозначения результата, полученного в диалоговом окне. Этот результат возвращается методом exec. Как правило, вы будете связывать кнопки OK и Cancel со слотами, как в
MyDialog
.

Модальные диалоговые окна

Для применения диалогового окна как модального вы вызываете метод

exec
, который открывает диалоговое окно и возвращает
QDialog::Accepted
или
QDialog::Rejected
в зависимости от того, какой слот был активизирован:

MyDialog* dialog = new MyDialog(this, "mydialog");

if (dialog->exec == QDialog::Accepted) {

 // Пользователь щелкнул мышью кнопку OK

 doSomething;

} else {

 // Пользователь щелкнул мышью кнопку Cancel или

 // диалоговое окно уничтожено

 doSomethingElse;

}

delete dialog;

Когда метод

exec
возвращает управление приложению, диалоговое окно автоматически скрывается, но вы все равно удаляете объект из памяти.

  • Читать дальше
  • 1
  • ...
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: