Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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
<b>QDialog(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags f=0);</b>
Вы не задаете в модальном диалоговом окне флаг модального режима равным
TRUE
exec
Конструктор вашего диалогового окна будет выглядеть примерно следующим образом:
MySMDialog::MySMDialog(QWidget *parent, const char *name):
QDialog(parent, name, TRUE) {
...
}
После того как вы определили ваше диалоговое окно, вызовите функцию
show
QApplication::processEvents
MySMDialog *dialog = MySMDialog(this, "semimodal");
dialog->show();
while (processing) {
doSomeProcessing();
app->processEvents();
if (dialog->wasCancelled()) break;
}
Перед продолжением выполнения проверьте, не уничтожено ли диалоговое окно. Имейте в виду, что функция
wasCancelled
QDialog
Комплект Qt предоставляет готовые подклассы класса
QDialog
QMessageBox
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
Типичный пример использования окна
QMessageBox
int 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();