Закрытие окна из программы

В предыдущих разделах для закрытия окна мы использовали слот quit() объекта приложения. Прототип метода:

void quit()

Однако этот метод не только закрывают текущее окно, но и завершают выполнение всего приложения. Чтобы закрыть только текущее окно следует воспользоваться слотом close() из класса QWidget. Прототип метода:

bool close()

Метод возвращает значение true, если окно успешно закрыто, и false — в противном случае. Закрыть сразу все окна приложения позволяет слот closeAllWindows() из класса QApplication. Прототип метода:

void closeAllWindows()

Если для окна константа Qt::WA_DeleteOnClose установлена в истинное значение, то после закрытия окна объект окна будет автоматически удален. Если константа имеет ложное значение, то окно просто скрывается. Значение атрибута можно изменить с помощью метода setAttribute():

w->setAttribute(Qt::WA_DeleteOnClose, true);

После вызова метода close() или нажатия кнопки Закрыть в заголовке окна генерируется событие QEvent::Close. Если внутри класса определить метод с предопределенным названием closeEvent(), то это событие можно перехватить и обработать. Прототип метода:

virtual void closeEvent(QCloseEvent *event)

В качестве параметра метод принимает указатель на объект класса QCloseEvent, который содержит методы accept() (позволяет закрыть окно) и ignore() (запрещает закрытие окна). Вызывая эти методы можно контролировать процесс закрытия окна. Прототипы методов:

void accept()
void ignore()

В качестве примера закроем окно при нажатии на кнопку (листинг 3.14).

Листинг 3.14. Закрытие окна из программы

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QWidget window;
   window.setWindowTitle("Закрытие окна из программы");
   window.resize(350, 70);

   QPushButton *button = new QPushButton("Закрыть окно", &window);
   button->setFixedSize(150, 30);
   button->move(75, 20);
   QObject::connect(button, SIGNAL(clicked()),
                    &window, SLOT(close()));
   window.show();
   return app.exec();
}

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов