QDialog
exec
и show
для обработки модальных и немодальных диалоговых окон, у него есть встроенный класс QLayout
, который можно использовать, и несколько сигналов и слотов, полезных для формирования откликов на нажатие кнопки.Обычно вы будете создавать для своих диалоговых окон класс-потомок QDialog
#include
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
Учтите, что когда вызывается exec
Немодальные диалоговые окна слегка отличаются от обычных основных окон прежде всего тем, что располагаются поверх своего родительского окна, совместно используют их элемент на панели задач и автоматически скрываются, когда вызван слот accept
reject
.Для отображения немодального диалогового окна вызывайте метод show
QMainWindow
:MyDialog *dialog = new MyDialog(this, "mydialog");
dialog->show();
Функция show
MyDialog::MyDialog(QWidget *parent, const char *name) :
QDialog(parent, name) {
...
connect(ok_pushbutton, SIGNAL(clicked()), this, SLOT(OkClicked()));
connect(cancel_pushbutton, SIGNAL(clicked()), this, SLOT(CancelClicked()));
}
MyDialog::OkClicked() {
// Выполните что-либо
}
MyDialog::CancelClicked() {
// Выполните что-либо другое
}
Как и в случае модального окна, диалоговое окно автоматически скрывается при нажатии кнопки.
Для создания полумодального диалогового окна вы должны задать флаг модального режима в конструкторе QDialog
show
:QDialog(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags f=0);