Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
delete dialog;Когда метод
execУчтите, что когда вызывается
execНемодальные диалоговые окна слегка отличаются от обычных основных окон прежде всего тем, что располагаются поверх своего родительского окна, совместно используют их элемент на панели задач и автоматически скрываются, когда вызван слот
acceptrejectДля отображения немодального диалогового окна вызывайте метод
showQMainWindowMyDialog *dialog = new MyDialog(this, "mydialog");dialog->show();Функция
showMyDialog::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() { // Выполните что-либо другое}Как и в случае модального окна, диалоговое окно автоматически скрывается при нажатии кнопки.
Для создания полумодального диалогового окна вы должны задать флаг модального режима в конструкторе
QDialogshow<b>QDialog(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags f=0);</b>
Вы не задаете в модальном диалоговом окне флаг модального режима равным
TRUEexecКонструктор вашего диалогового окна будет выглядеть примерно следующим образом:
MySMDialog::MySMDialog(QWidget *parent, const char *name): QDialog(parent, name, TRUE) { ...}После того как вы определили ваше диалоговое окно, вызовите функцию
showQApplication::processEventsMySMDialog *dialog = MySMDialog(this, "semimodal");dialog->show();while (processing) { doSomeProcessing(); app->processEvents(); if (dialog->wasCancelled()) break;}Перед продолжением выполнения проверьте, не уничтожено ли диалоговое окно. Имейте в виду, что функция
wasCancelledQDialogКомплект Qt предоставляет готовые подклассы класса
QDialogQMessageBox
QMessageBoxУ класса
QMessageBox<b>#include <qmessagebox.h></b><b>int information(QWidget *parent, const QString& caption,</b><b> const QString&text, int button0, int button1=0, int button2=0);</b><b>int warning(QWidget *parent, const QString& caption,</b><b> const QString& text, int button0, int button1, int button2=0);</b><b>int critical(QWidget *parent, const QString& caption,</b><b> const QString& text, int button0, int button1, int button2=0);</b>Можно выбрать кнопки из списка готовых кнопок
QMessageBox□
QMessageBox::Ok□
QMessageBox::Cancel□
QMessageBox::Yes□
QMessageBox::No□
QMessageBox::Abort□
QMessageBox::Retry□
QMessageBox::IgnoreТипичный пример использования окна
QMessageBoxint result = QMessageBox::information(this, "Engine Room Query", "Do you wish to engage the HyperDrive?", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape);switch (result) {case QMessageBox::Yes: hyperdrive->engage();