I use the events QEvent::ApplicationActivate and QEvent::ApplicationDeactivate to show/hide some part of my app when needed.

But now, thoses events are flagged as deprecated :

This enum has been deprecated. Use ApplicationStateChange instead.

So I tried to switch to this event. It is triggered when it should, but I can't find a way to get the application state with some sort of cast or any getters.

Any ideas ?

有帮助吗?

解决方案

Just as for any other event, you need to cast it to more specific type to get event properties. The class is QApplicationStateChangeEvent. The documentation is surprisingly silent about it, but it exists and is declared in event.h. The following code works fine in my Qt 5.1 installation:

#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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top