Qt :: WA_TranslucentBackground到处都可用?

时间:2011-10-27 20:46:31

标签: qt

我有一个自定义小部件来模拟气球提示。要正确显示,窗口小部件取决于QWidget属性Qt::WA_TranslucentBackground。我的应用程序应该适用于所有主要平台(Windows XP,Windows 7,Linux,Mac),所以我担心一下:这个属性是否适用于所有主要平台?如果没有,我可以查询是否? testAttribute()不这样做。它只返回是否已设置属性,而不是设置它是否有效。

2 个答案:

答案 0 :(得分:8)

对于Linux,您应该检查是否启用了合成:

bool QX11Info::isCompositingManagerRunning() [static]

e.g。

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

这个问题很老,但这可能对某人有所帮助。

答案 1 :(得分:7)

当配置为不支持ARGB时,这应该适用于Linux over X11的唯一例外。请参阅QWidget文档:

  

创建半透明Windows

     

从Qt 4.5开始,可以创建半透明的窗口   窗口系统上支持合成的区域。

     

要在顶级窗口小部件中启用此功能,请设置它   使用setAttribute()并确保Qt :: WA_TranslucentBackground属性   它的背景在区域中涂有非不透明的颜色   你想要部分透明。

     

平台说明:

     

X11:此功能依赖于使用支持ARGB视觉效果的X服务器和合成窗口管理器。

     

Windows:小部件需要设置Qt :: FramelessWindowHint窗口标志,以便半透明工作。

考虑阅读标题为“透明度和双缓冲”的段落,可能会很有趣。