6

当我的应用程序失去焦点时,我需要设置透明度。我还需要在重新获得焦点时重置透明度(通过鼠标单击或 alt-tab 或其他方式)

我知道如何设置透明度,所以这不是问题:setWindowOpacity(0.75);

问题是什么时候?

4

3 回答 3

5

我同意 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 文档中的事件系统

于 2015-03-15T10:00:35.377 回答
1

有时会出现以下问题QWidget::focusInEventQWidget::focusOutEvent事件QWidget

还有一种使用QWidget::windowActivationChange(bool state). 真的,您的小部件处于活动状态,否则为假。

于 2013-01-17T10:58:25.737 回答
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。请参阅此答案以获得更可靠的方法。

于 2013-01-17T10:43:23.950 回答