当我的应用程序失去焦点时,我需要设置透明度。
当其重新获得焦点(通过鼠标单击、alt-tab或其他方式)时,我还需要重置透明度。
我知道如何设置透明度,所以这不是问题:setWindowOpacity(0.75);
问题在于什么时候进行设置?
当我的应用程序失去焦点时,我需要设置透明度。
当其重新获得焦点(通过鼠标单击、alt-tab或其他方式)时,我还需要重置透明度。
我知道如何设置透明度,所以这不是问题:setWindowOpacity(0.75);
问题在于什么时候进行设置?
我同意Kévin Renella的看法,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文档中的事件系统。
当发生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
有时会出现问题。请参考答案以获取更可靠的方法。