Qt :: WA_TranslucentBackground到处都可用?

Seb*_*zus 6 qt

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

Win*_*and 8

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

bool QX11Info::isCompositingManagerRunning() [static]
Run Code Online (Sandbox Code Playgroud)

例如

#ifdef Q_WS_X11
    if(QX11Info::isCompositingManagerRunning())
        setAttribute(Qt::WA_TranslucentBackground);
#endif
Run Code Online (Sandbox Code Playgroud)

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

  • 而且,对于那些在Google上徘徊的人来说,如果你发现自己需要支持非合成桌面,例如圆形OSD或语音气球弹出,那么Qt [ShapedClock](https://doc.qt.io/qt -5/qtwidgets-widgets-shapedclock-example.html)示例演示如何使用`setMask`生成非方形窗口而不进行合成. (2认同)

Luc*_*lon 7

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

创建半透明Windows

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

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

平台说明:

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

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

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