当我的应用程序失去焦点时,我需要设置透明度。我还需要在重新获得焦点时重置透明度(通过鼠标单击或 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 文档中的事件系统。
有时会出现以下问题QWidget::focusInEvent
和QWidget::focusOutEvent
事件QWidget
还有一种使用QWidget::windowActivationChange(bool state)
. 真的,您的小部件处于活动状态,否则为假。
当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
。请参阅此答案以获得更可靠的方法。