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

rel*_*pse 5 qt

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

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

问题是什么时候?

Sac*_*eph 5

我同意 K\xc3\xa9vin Renella 的观点,即 和 有时会出现QWidget::focusInEvent问题QWidget::focusOutEvent。相反,更好的方法是实施QWidget::changeEvent()

\n\n
void MyQWidget::changeEvent(QEvent *event)\n{   \n    QWidget::changeEvent(event);\n    if (event->type() == QEvent::ActivationChange)\n    {\n        if(this->isActiveWindow())\n        {\n            // widget is now active\n        }\n        else\n        {\n            // widget is now inactive\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以通过安装event-filter. 有关详细信息,请参阅Qt 文档上的事件系统。

\n


UmN*_*obe 1

QFocusEvent事件发生时。只需重新实施即可

void QWidget::focusInEvent ( QFocusEvent * event );
void QWidget::focusOutEvent ( QFocusEvent * event );
Run Code Online (Sandbox Code Playgroud)

来自QWidget。确保在工作之前或之后始终调用超类方法。即(在案例之前)

void Mywidget::focusInEvent (QFocusEvent * event ){
   QWidget::focusInEvent(event);
   // your code
}
Run Code Online (Sandbox Code Playgroud)

QWidget::focusInEvent但是,有时和会出现问题QWidget::focusOutEvent。请参阅此答案以获得更可靠的方法。