当我的应用程序失去焦点时,我需要设置透明度。 我还需要当它重新获得焦点(从鼠标点击或使用Alt-Tab或其他),QEvent意味着失去窗口焦点,重新获得窗口焦点? (设置透明度)
我知道如何设置透明度重置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
当我的应用程序失去焦点时,我需要设置透明度。 我还需要当它重新获得焦点(从鼠标点击或使用Alt-Tab或其他),QEvent意味着失去窗口焦点,重新获得窗口焦点? (设置透明度)
我知道如何设置透明度重置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
发生QFocusEvent事件时。只需重新实施
void QWidget::focusInEvent (QFocusEvent * event);
void QWidget::focusOutEvent (QFocusEvent * event);
从QWidget。确保在工作之前或之后始终调用超级方法。即,(以前的情况)
void Mywidget::focusInEvent (QFocusEvent * event){
QWidget::focusInEvent(event);
// your code
}
但是,有时对于QWidget::focusInEvent
和QWidget::focusOutEvent
问题。看到这个answer更可靠的方法。
有有时的QWidget
QWidget::focusInEvent
和QWidget::focusOutEvent
事件的问题有使用QWidget::windowActivationChange(bool state)
替代。确实,你的小部件是活动的,否则为false。
我同意KévinRenella的看法,有时候QWidget::focusInEvent
和QWidget::focusOutEvent
有问题。取而代之的是,更好的办法是重新实现QWidget::changeEvent()
:
void MyQWidget::changeEvent(QEvent *event)
{
QWidget::changeEvent(event);
if (event->type() == QEvent::ActivationChange)
{
if(this->isActiveWindow())
{
// widget is now active
}
else
{
// widget is now inactive
}
}
}
您也可以通过安装event-filter
达到同样的事情。有关更多信息,请参见Qt文档中的The Event System。
几乎解决方案是使用enterEvent和leaveEvent,但事不关己,重点只有当鼠标离开 – relipse