焦点事件不起作用,因为如果您通过单击其非客户端框架来激活窗口,则不会发送它们。此外,如果您单击窗口的内部组件,它们将获得焦点事件,而不是您的窗口,但该窗口仍将被激活,即使它之前未激活或没有焦点。
问问题
11610 次
2 回答
17
The event you want is QEvent::WindowActivate
. Override event()
to process it:
bool YourWidget::event(QEvent *e)
{
if (e->type() == QEvent::WindowActivate) {
// window was activated
}
return QWidget::event(e);
}
于 2013-05-23T19:03:10.247 回答
7
Qt 提供了几个可以使用的虚拟事件处理函数。由于窗口的激活会更改其状态,因此您需要处理一些更改事件:
void MyWidget::changeEvent(QEvent * e) {
if(e->type() == QEvent::ActivationChange && this->isActiveWindow()) {
// .. this is now the active window
}
}
参考
于 2016-07-13T16:58:00.293 回答