当我的应用程序失去焦点时,我需要设置透明度。我还需要在重新获得焦点时重置透明度(通过鼠标单击或 alt-tab 或其他方式)
我知道如何设置透明度,所以这不是问题: setWindowOpacity(0.75);
问题是什么时候?
我同意 K\xc3\xa9vin Renella 的观点,即 和 有时会出现QWidget::focusInEvent问题QWidget::focusOutEvent。相反,更好的方法是实施QWidget::changeEvent():
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}\nRun Code Online (Sandbox Code Playgroud)\n\n您还可以通过安装event-filter. 有关详细信息,请参阅Qt 文档上的事件系统。
当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。请参阅此答案以获得更可靠的方法。
| 归档时间: |
|
| 查看次数: |
4473 次 |
| 最近记录: |