我有一个自定义的小部件来模拟气球提示。要正确显示小部件,小部件依赖于QWidget属性Qt::WA_TranslucentBackground。我的应用程序应该可以在所有主要平台(Windows XP、Windows 7、Linux、Mac)上运行,所以我有点担心:这个属性是否在所有主要平台上都可用?如果不是,我可以查询它是否是吗?testAttribute()不会这样做。只返回属性是否设置,不返回属性设置是否生效。
发布于 2011-10-28 06:03:31
当配置为不支持ARGB时,这应该适用于X11上的Linux的唯一例外。请参阅QWidget文档:
创建半透明窗口
从Qt4.5开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。
若要在顶级构件中启用此功能,请使用setAttribute()设置其Qt::WA_TranslucentBackground属性,并确保其背景在您希望部分透明的区域中使用非不透明颜色绘制。
平台说明:
X11:该特性依赖于支持ARGB可视化的X服务器和合成窗口管理器的使用。
窗口:小部件需要设置Qt::FramelessWindowHint窗口标志才能使半透明效果工作。
还可以考虑阅读标题为“透明度和双重缓冲”的段落,这可能会很有趣。
发布于 2011-12-28 23:46:36
对于Linux,您应该检查是否启用了合成:
bool QX11Info::isCompositingManagerRunning() [static]例如:
#ifdef Q_WS_X11
if(QX11Info::isCompositingManagerRunning())
setAttribute(Qt::WA_TranslucentBackground);
#endif这个问题很老了,但这可能会对某些人有所帮助。
https://stackoverflow.com/questions/7922177
复制相似问题