2015-05-30 2 views
0

Привет: Я запускаю часы в фоновом режиме, и я хотел бы отключить событие закрытия и сообщить пользователю, что сначала останавливают часы. Я уже знаю о повторной реализации closeEvent, , но Я бы хотел попробовать в changeEvent reimplementation. Это код:QEvent :: Close not triggered from changeEvent

void AlarmUI::changeEvent (QEvent *event) { 
    switch (event->type()) { 
     case QEvent::WindowStateChange: { 
      if (isMinimized()) hide(); 
      break; 
     } 
     case QEvent::Close: { 
      if (m_timer->isActive()) event->ignore(); 
       event->accept(); 
      break; 
     } 
     default: { 
      QMainWindow::changeEvent (event); 
      break; 
     } 
    } 
} 

Вышеупомянутое не останавливает событие закрытия, пока часы активны ... любые идеи?

ответ

1

Как говорится в the doc, смена событий не включает QEvent::Close.

В любом случае вы должны перепрофилировать QWidget::closeEvent.

+0

Но это в [QEvent] (http://doc.qt.io/qt-4.8/qevent.html) param – Joel

+1

@Joel 'QEvent :: type()' описывает все доступные события, включая 'QEvent: : Close'. 'QWidget :: changeEvent' обрабатывает события определенных типов, которые не включают' QEvent :: Close'. – hank

+0

Ах, я понимаю, спасибо. – Joel