2011-10-27 5 views
5

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

答えて

6

これは、ARGBをサポートしないように設定されている場合、X11以上のLinuxを除いてのみ機能します。 QWidgetマニュアルを参照してください:

のQt 4.5以来半透明のWindows

を作成し、合成をサポートするウィンドウシステム上の半透明の 領域を持つウィンドウを作成することが可能でした。地域でトップレベルのウィジェットでこの機能を有効にするには

、)のsetAttribute(とその Qtの:: WA_TranslucentBackground属性を設定し、その背景が不透明色で塗られていること を確保 あなたは部分的に透明になりたいです。

プラットフォームメモ:

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

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

「透明性とダブルバッファリング」という段落もまた読んでください。面白いかもしれません。

+0

現在のLinuxがARGBをサポートしていないのは、どのように共通するのかまれですか?どういうわけかそれを照会することはできますか? –

+0

最近のハードウェア/ディストリビューションでは問題はないと思います。とにかく、xdpyinfoを使うか、設定ファイルxorg.confを見て情報を得るべきです。おそらく、組み込みのLinuxシステムにいくつかの問題があるかもしれません。これはさらに何かを与える:http://stackoverflow.com/questions/2434511/what-pixel-format-does-x-server-use。 –

7

Linuxのあなたは合成が有効になっているかどうかを確認する必要があります

bool QX11Info::isCompositingManagerRunning() [static] 

例えば

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

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

+1

そして、Google以外のユーザーのために、丸められたOSDやスピーチバルーンポップアップなどのために、合成されていないデスクトップをサポートする必要がある場合、Qt [ShapedClock](https://doc.qt.io/ qt-5/qtwidgets-widgets-shapedclock-example.html)の例では、 'setMask'を使用して合成を行わずに非正方形のウィンドウを生成する方法を示しています。 – ssokolow

+0

'setMask'を使わずに' Qt :: WA_TranslucentBackground'をlinuxで動かすことがあることに注意してください。いくつかの属性とウィンドウフラグも有効にする必要があります。 https://stackoverflow.com/a/30596357/999943 – phyatt

関連する問題