在Qt中,QEvent意味着失去窗口焦点,重新获得窗口焦点? (设置透明度)

时间:2013-01-17 10:37:27

标签: qt

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

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

问题是什么时候?

3 个答案:

答案 0 :(得分:4)

我同意KévinRenella的观点,QWidget::focusInEventQWidget::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::focusInEventQWidget::focusOutEvent有时会出现问题。请参阅此answer以获得更可靠的方法。

答案 2 :(得分:1)

QWidget::focusInEvent

QWidget::focusOutEventQWidget事件有时会出现问题

使用QWidget::windowActivationChange(bool state)有另一种选择。没错,你的小部件是活动的,否则就是假的。