【发布时间】:2013-01-17 10:37:26
【问题描述】:
当我的应用程序失去焦点时,我需要设置透明度。 我还需要在重新获得焦点时重置透明度(通过鼠标单击或 alt-tab 或其他方式)
我知道如何设置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
【问题讨论】:
-
一个几乎解决方案是使用enterEvent和leaveEvent,但这与鼠标离开时的焦点无关
标签: qt
当我的应用程序失去焦点时,我需要设置透明度。 我还需要在重新获得焦点时重置透明度(通过鼠标单击或 alt-tab 或其他方式)
我知道如何设置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
【问题讨论】:
标签: qt
我同意 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 文档上的 The Event System。
【讨论】:
当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) 的替代方法。 True,您的小部件处于活动状态,否则为 false。
【讨论】: