Эквивалент QEvent ApplicationDeactivate

Я использую события QEvent::ApplicationActivate и QEvent::ApplicationDeactivate, чтобы показать/скрыть часть моего приложения, когда это необходимо.

Но теперь эти события помечены как устаревшие :

Это перечисление устарело. Вместо этого используйте ApplicationStateChange.

Поэтому я попытался переключиться на это событие. Он запускается, когда должен, но я не могу найти способ получить состояние приложения с помощью какого-либо приведения или каких-либо геттеров.

Есть идеи ?


person Thomas Ayoub    schedule 24.01.2014    source источник


Ответы (1)


Как и для любого другого события, вам нужно привести его к более конкретному типу, чтобы получить свойства события. Класс QApplicationStateChangeEvent. Документация на удивление об этом умалчивает, но он существует и объявлен в event.h. Следующий код отлично работает в моей установке Qt 5.1:

#include <QApplicationStateChangeEvent>

bool MainWindow::eventFilter(QObject *o, QEvent *e) {
  if (e->type() == QEvent::ApplicationStateChange) {
    qDebug() << "state:" 
             << static_cast<QApplicationStateChangeEvent*>(e)->applicationState();
  }
  return QMainWindow::eventFilter(o, e);
}
person Pavel Strakhov    schedule 24.01.2014
comment
@MartinDelille WindowDeactivate устарел, но поддерживается для обратной совместимости. Он предназначен только для поддержания работы старых программ Qt, но не рекомендуется для использования. - person Troyseph; 05.06.2015