我有一个自定义小部件来模拟气球提示。要正确显示,窗口小部件取决于QWidget属性Qt::WA_TranslucentBackground
。我的应用程序应该适用于所有主要平台(Windows XP,Windows 7,Linux,Mac),所以我担心一下:这个属性是否适用于所有主要平台?如果没有,我可以查询是否? testAttribute()
不这样做。它只返回是否已设置属性,而不是设置它是否有效。
答案 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窗口标志,以便半透明工作。
考虑阅读标题为“透明度和双缓冲”的段落,可能会很有趣。