5

ウィンドウの背景を透明にしようとしています。しかし、その上にあるウィジェットの下に、デスクトップイメージの一部が表示されます。今、私はコンストラクターでこれを持っています:

    self.setFocusPolicy(Qt.StrongFocus)
    self.setAttribute(Qt.WA_QuitOnClose,True)

    self.setBackgroundRole(QtGui.QPalette.Base)
    self.setAttribute(Qt.WA_NoSystemBackground)
4

3 に答える 3

3

私はちょうどこれを見つけまし

半透明の窓の作成

Qt 4.5 以降、合成をサポートするウィンドウ システムで半透明の領域を持つウィンドウを作成することが可能になりました。

トップレベルのウィジェットでこの機能を有効にするには、その Qt::WA_TranslucentBackground 属性を setAttribute() で設定し、部分的に透明にしたい領域の背景が不透明でない色でペイントされるようにします。

PyQt はまだ Qt 4.4 です。おそらくそれが問題です。

于 2009-04-20T22:32:24.927 に答える
2

ウィジェットにこれを試してください:

widget.setAutoFillBackground(True)

QtDesignerでも設定できると思います。

于 2009-04-20T21:31:03.017 に答える
2

gs の回答に加えて、この faq は、(Qt 4.5 より前に) これを達成できない理由を説明しています。

よくある質問のリンク:

ウィンドウが透明で、その上のウィジェットが Qt にない場合、部分的な透明性は直接サポートされていません。

PyQt の最新バージョンは Qt 4.4 に対して作成されたため、希望する半透明のウィンドウをサポートしていないことに注意してください。gs の他の答えである setAutoFillBackground(True) については、メイン ウィンドウの背景色を透明以外に設定している場合に機能します。

また、Qt.WA_NoSystemBackground のドキュメントを参照してください。これまでの透過効果に依存することはできないと書かれています。

Qt::WA_NoSystemBackground

ウィジェットに背景がないことを示します。つまり、ウィジェットがペイント イベントを受け取ると、背景は自動的に再描画されません。注: WA_OpaquePaintEvent とは異なり、新しく公開された領域が背景で塗りつぶされることはありません (たとえば、最初にウィンドウを表示した後、アプリケーションがペイント イベントを処理するまで、ユーザーはウィンドウを「透かして」見ることができます)。これは、ウィジェットの作成者によって設定/クリアされます。

于 2009-04-22T00:22:19.087 に答える