当我的应用程序失去焦点时,我需要设置透明度。 我还需要在重新获得焦点时重置透明度(通过鼠标单击或alt-tab或其他任何方式)
我知道如何设置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
答案 0 :(得分:4)
我同意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。
答案 1 :(得分:1)
发生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以获得更可靠的方法。
答案 2 :(得分:1)
QWidget::focusInEvent
QWidget::focusOutEvent
和QWidget
事件有时会出现问题
使用QWidget::windowActivationChange(bool state)
有另一种选择。没错,你的小部件是活动的,否则就是假的。