2014-01-24 115 views
1

我使用事件QEvent::ApplicationActivateQEvent::ApplicationDeactivate在需要時顯示/隱藏我的應用程序的某些部分。等同於QEvent ApplicationDeactivate

但現在,放入系統事件被標記爲棄用

這個枚舉已被棄用。改用ApplicationStateChange。

所以我試着切換到這個事件。它應該被觸發,但我無法找到一種方式來獲得應用程序狀態與某種類型的演員或任何獲得者。

任何想法?

回答

4

就像任何其他事件一樣,您需要將其轉換爲更具體的類型才能獲取事件屬性。班級是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); 
} 
+0

我收到* WindowDeactivate *事件,但沒有* ApplicationStateChange *事件... –

+0

@MartinDelille WindowDeactivate折舊,但保持向後兼容性。它只是在那裏保持舊的Qt程序工作,但不建議使用。 – Troyseph