Показаны сообщения с ярлыком close. Показать все сообщения
Показаны сообщения с ярлыком close. Показать все сообщения

понедельник, 16 декабря 2013 г.

Qt. предотвращение закрытия окна программы

Qt. предотвращение закрытия окна программы

Примечание: речь идет о Qt на виджетах.

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

virtual void closeEvent(QCloseEvent *event);

таким образом, если мы имеем, например, форму MainWindow, то в заголовке (.h) пишем такой код:

class MainWindow : public QMainWindow
{
...
 virtual void closeEvent(QCloseEvent *event);
... 
};

 



а в файле реализации непосредственно сам метод:
 

void MainWindow::closeEvent(QCloseEvent* event)
{
  int quit = QMessageBox::information(this,  
                  "Realy quit?", "Are you sure?", tr("Yes"), tr("No"));
  quit == 0 ?  event->accept(): event->ignore();
}
 
и не забываем прописать все необходимые инклюды в начале страницы:
 
#include "qmessagebox"
#include "qcloseevent" 
 


Теперь любая попытка закрыть данное окно приведет к появлению 
вашего сообщения.