如何检测窗口是否已被激活?

Jas*_*enX 6 qt

焦点事件不起作用,因为如果通过单击其非客户端框架激活窗口,则不会发送它们.此外,如果您单击窗口的内部组件,它们将获得焦点事件,而不是窗口,但窗口仍将被激活,即使它之前未激活或聚焦.

Nik*_*kin 12

你想要的事件是QEvent::WindowActivate.覆盖event()以处理它:

bool YourWidget::event(QEvent *e)
{
    if (e->type() == QEvent::WindowActivate) {
        // window was activated
    }
    return QWidget::event(e);
}
Run Code Online (Sandbox Code Playgroud)


Zet*_*eta 6

Qt 提供了几个可以使用的虚拟事件处理函数。由于窗口的激活会更改其状态,因此您需要处理一些更改事件:

void MyWidget::changeEvent(QEvent * e) {
    if(e->type() == QEvent::ActivationChange && this->isActiveWindow()) {
       // .. this is now the active window      
    }
}
Run Code Online (Sandbox Code Playgroud)

参考