アプリケーションがフォーカスを失ったときに透過性を設定する必要があります。また、フォーカスが戻ったときに透明度をリセットする必要があります(マウスクリックまたはalt-tabなどから)
私は透明度を設定する方法を知っているので、それは問題ではありません: setWindowOpacity(0.75);
問題はいつ?
アプリケーションがフォーカスを失ったときに透過性を設定する必要があります。また、フォーカスが戻ったときに透明度をリセットする必要があります(マウスクリックまたはalt-tabなどから)
私は透明度を設定する方法を知っているので、それは問題ではありません: setWindowOpacity(0.75);
問題はいつ?
と には時々問題があるという 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 ドキュメントのイベント システムを参照してください。
時々問題QWidget::focusInEvent
とのQWidget::focusOutEvent
イベントがありますQWidget
を使用する代替手段がありQWidget::windowActivationChange(bool state)
ます。True、ウィジェットがアクティブ、そうでない場合は False。
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
。より信頼性の高いアプローチについては、この回答を参照してください。