どこでもQt :: WA_TranslucentBackgroundが利用できますか?

私はバルーンチップをエミュレートするカスタムウィジェットを持っています。正しく表示されるためには、ウィジェットはQWidget属性 Qt :: WA_TranslucentBackground に依存します。私のアプリケーションはすべての主要なプラットフォーム(Windows XP、Windows 7、Linux、Mac)で動作するはずですので少し気になります。この属性はすべての主要なプラットフォームで利用できますか?そうでない場合、それが照会できるのですか? testAttribute()はそうしません。属性が設定されているかどうかを返します。

6

2 答え

これは、ARGBをサポートしないように設定されている場合、X11以上のLinuxを除いてのみ動作します。 QWidget のドキュメントを参照してください:

半透明のWindowsを作成する

     

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

     

トップレベルウィジェットでこの機能を有効にするには、   setAttribute()を使用してQt :: WA_TranslucentBackground属性を使用して   その領域の背景が非不透明な色で塗られていること   部分的に透明にしたいと考えています。

     

プラットフォームノート:

     

X11:この機能は、ARGBビジュアルと合成ウィンドウマネージャをサポートするXサーバの使用に依存します。

     

Windows:透光性のためにウィジェットにQt :: FramelessWindowHintウィンドウフラグが設定されている必要があります。

興味深いかもしれない "透明性とダブルバッファリング"という段落も読むことを検討してください。

7
追加された
私はあなたが最近のハードウェア/ディストリビューションでそれに問題があるとは思わない。とにかく、xdpyinfoを使うか、設定ファイルxorg.confを見て情報を得るべきです。おそらく、組み込みのLinuxシステムにいくつかの問題があるかもしれません。これはさらに何かを与えます: stackoverflow。 co.jp/questions/2434511 /… をご覧ください。
追加された 著者 Luca Carlon,
現代のLinuxがARGBをサポートしていないのは、どれほど一般的か希少なのでしょうか?どういうわけかそれを照会することはできますか?
追加された 著者 Sebastian Negraszus,

Linuxの場合は、合成が有効かどうかを確認する必要があります:

bool QX11Info::isCompositingManagerRunning() [static]

例えば

#ifdef Q_WS_X11
    if(QX11Info::isCompositingManagerRunning())
        setAttribute(Qt::WA_TranslucentBackground);
#endif

この質問は古いですが、これは誰かを助けるかもしれません。

7
追加された
setMask を使わずにlinuxで Qt :: WA_TranslucentBackground を動作させるには、さらにいくつかの属性とウィンドウフラグを有効にする必要があることに注意してください。 stackoverflow.com/a/30596357/999943
追加された 著者 phyatt,
また、Google以外のユーザーのために、丸められたOSDやスピーチバルーンポップアップなどのために、非合成デスクトップをサポートする必要がある場合は、Qt ShapedClock の例は、 setMask を使用して合成を行わずに非正方形のウィンドウを生成する方法を示しています。
追加された 著者 ssokolow,