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::focusInEventとのQWidget::focusOutEventイベントがありますQWidget

を使用する代替手段がありQWidget::windowActivationChange(bool state)ます。True、ウィジェットがアクティブ、そうでない場合は False。

于 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 に答える